多个线程共享进程内存空间中数据段的变量
代码:
#include <stdio.h>
#include <pthread.h>
int g_data = 0;
void *func1(void *arg)
{
printf("t1:%ld pthread is creat\n",(unsigned long)pthread_self());
printf("t1:param is %d\n", *((int *)arg));
while(1){
printf("t1: %d\n",g_data++);
sleep(1);
}
}
void *func2(void *arg)
{
printf("t2:%ld pthread is creat\n",(unsigned long)pthread_self());
printf("t2:param is %d\n", *((int *)arg));
while(1){
printf("t2: %d\n",g_data++);
sleep(1);
}
}
int main()
{
int ret;
int param = 100;
pthread_t t1;
pthread_t t2;
ret = pthread_create(&t1, NULL, func1, (void *)¶m);
if(ret == 0){
printf("main:creat t1 success\n");
}
ret = pthread_create(&t2, NULL, func2, (void *)¶m);
if(ret == 0){
printf("main:creat t2 success\n");
}
printf("main:%ld\n",(unsigned long)pthread_self());
while(1){
printf("main: %d\n",g_data++);
sleep(1);
}
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
运行结果:
CLC@Embed_Learn:~/thread$ gcc demo3.c -pthread
CLC@Embed_Learn:~/thread$ ./a.out
main:creat t1 success
main:creat t2 success
main:140451166861056
main: 0
t1:140451158574848 pthread is creat
t1:param is 100
t1: 1
t2:140451150182144 pthread is creat
t2:param is 100
t2: 2
t2: 3
t1: 4
main: 5
t2: 6
t1: 7
main: 8
t1: 10
t2: 9
main: 11
t1: 12
t2: 13
main: 14
^C
CLC@Embed_Learn:~/thread$
可以看出t1,t2的值一直在加,且没有出现重复,说明两个线程共享全局变量g_data的值,通过代码也验证了线程共享内存空间。