Unix 线程改变创建进程中变量的值(2)

执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

1.测试代码: a.c

 1 #include <fcntl.h>
 2 #include <unistd.h>
 3 #include <stdio.h>
 4 #include <pthread.h>
 5 #include <string.h>
 6
 7 pthread_t ntid;
 8
 9 void * thr_fn(void * arg)
10 {
11    int * fp = (int *)arg;
12    char * str = (char *)arg;
13
14    printf("I am a thread,receive a string:%s",str);
15    printf("Now,I will change it‘s value.\n");
16
17    strcpy(str,"Changed by a thread!\n");
18    return ((void *)0);
19 }
20
21 int main(void)
22 {
23     int err;
24     int fd;
25     char parent[100] = "I am parent!\n";
26
27     fd = open("log.txt",O_CREAT|O_WRONLY);
28     if(-1 == fd)
29     {
30     printf("Failed to open  file!\n");
31     }
32
33     err = pthread_create(&ntid,NULL,thr_fn,parent);
34     if(err != 0)
35     {
36     printf("can‘t create thread ,errno = %d\n",err);
37     }
38
39     void ** pr;
40     err = pthread_join(ntid,pr);
41     if(err !=0 )
42     {
43        printf("error happend when waited a thread!\n");
44     }
45     printf("In process,the value of the string is %s",parent);
46     return 0;
47 }

2.输出:

I am a thread,receive a string:I am parent!
Now,I will change it‘s value.
In process,the value of the string is Changed by a thread!

3.创建进程是通过指针传递参数给线程的,线程又是共享创建进程的一些资源的,可以改变进程的变量值。

php 在创建线程的时候,线程对象需要保存进程传递进来参数的值的方式是传值,如果在构造函数中,引用传递进来的参数,会报错误:

Fatal error: Cannot assign by reference to overloaded object。

时间: 2024-10-25 11:39:26

Unix 线程改变创建进程中变量的值(2)的相关文章

Unix 线程共享创建进程打开的文件资源(1)

执行环境:Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 1. 测试代码 : a.c 1 #include <fcntl.h> 2 #include <unistd.h> 3 #include <stdio.h> 4 #include <pthread.h> 5 #include <strin

Linux获取进程中变量

列出所有进程 1 #include <linux/kernel.h> 2 #include <linux/module.h> 3 #include <linux/init.h> 4 #include <linux/sched.h> 5 #include <linux/list.h> 6 7 static __init int print_pid(void) 8 { 9 struct task_struct *task,*p; 10 struct

asp后台获取js中变量的值

<span id="s1"  runat="server">span</span> js对其赋值 document.getElementById('s1').innerHtml="value"; 后台获取时: s1.innerHtml的值始终为span,但是页面上其显示值已经为value.查看源代码后发现span标签中的值仍然是span. 换了Jquery,$("#s1").innerHtml()效果一

Dalvik虚拟机进程和线程的创建过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8923484 我们知道,在Android系统中,Dalvik虚拟机是运行Linux内核之上的.如果我们把Dalvik虚拟机看作是一台机器,那么它也有进程 和线程的概念.事实上,我们的确是可以在Java代码中创建进程和线程,也就是Dalvik虚拟机进程和线程.那么,这些Dalvik虚拟机所创建的进程 和线程与其宿主Linux内核的进程和线程有什么关

Java总结(九)——(线程模块 一(线程的创建(方法一)与启动,线程状态与生命周期,进程与线程))

一.进程与线程 进程:每一个独立运行的程序称为一个进程 线程:线程时一个进程内部的一条执行路径,Java虚拟机允许程序并发的运行多个执行路径 *进程中执行运算的最小单位-->线程<--处理机分配 进程与线程的区别: (1)进程有独立的运行地址空间,一个进程崩溃后不会影响到其他的进程,而线程只是 一个进程中的一个执行路径,如果有一条线程奔溃了,可能会影响到进程中的的其他线程 (2)线程有自己的栈和局部变量,多个线程共享同一进程的地址空间 (3)一个进程至少有一个线程 多线程 (1)多线程 就是在

Unix线程概念、控制原语、属性

线程: 线程基础概念: 线程在Linux中又称轻量级进程.并且它和进程都有PCB(进程控制块),但是区别是进程的虚拟地址空间是独享的,也就是每个进程都有自己的虚拟地址空间,但是线程的PCB是共享的,在同一个虚拟地址空间里面,每个线程有自己的PCB.虽然每个线程都有自己的PCB,但是从内核的角度来看,进程和线程是一样的,这是因为同一个虚拟地址空间里面的每个线程的PCB指向的内存资源的三级页表是相同的.在Linux下,可以把线程看做是最小的执行单位(进程内部运用多线程完成任务),而进程是最小的分配资

进程和线程的定义及区别、线程同步、进程通讯方式总结

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一. 进程的概念 进程是在多道程序系统出现以后,为了描述系统内部各作业的活动规律而引进的概念. 由 于多道程序系统所带来的复杂环境,程序本身有了并行性[为了充分利用资源,在主存中同时存放多道作业运行,所以各作业之间是并行的].制约性[各程序由于 同时存在于主存中,因此他们之间会存在着相互依赖.相互制约的关系.一个是通过中间媒介--资源发生的间接制约关系,一个是各并行程序间需要相互协同而引 起

线程及与进程的对比

一.为什么要引入线程 进程是为了提高CPU的执行效率,减少因程序等待带来的CPU空转以及其他计算机软硬件资源而提出来的.进程是一个资源拥有者,因而在进程的创建.撤消和切换中,系统必须为之付出较大的时空开销.也正因为如此,在系统中所设置的进程数目不宜过多,进程切换的频率也不宜太高,但这也就限制了并发程度的进一步提高.如何能使多个程序更好地并发执行,同时又尽量减少系统的开销,已成为近年来设计操作系统时所追求的重要目标.于是,有不少操作系统的学者们想到,可否将进 程的上述属性分开,由操作系统分开来进行

Linux/UNIX线程(1)

线程(1) 本文将介绍怎样使用多个控制线程在单个进程环境中运行多个任务. 一个进程中的全部线程都能够訪问该进程的组成部件(如文件描写叙述符和内存). 线程包含了表示进程内运行环境必须的信息,当中包含进程中标识线程的线程ID.一组寄存器值.栈.调度优先级和策略.信号屏蔽字.errno变量以及线程私有数据.进程的全部信息对该进程的全部线程都是共享的,包含可运行的程序文本.程序的全局内存和堆内存.栈以及文件描写叙述符. 线程标识 进程ID在整个系统中是唯一的.每一个线程ID.线程ID仅仅在它所属的进程