当前位置: 技术问答>linux和unix
linux下的多线程共享数据区么?
来源: 互联网 发布时间:2017-04-11
本文导语: “WIN32里同一个进 程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。” 看别人的帖子里的;说linux内核在创建线程的时候做的do_fork 实际是建立了一个不完整的进程,所以linux下的多线程是不共享...
“WIN32里同一个进 程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。”
看别人的帖子里的;说linux内核在创建线程的时候做的do_fork 实际是建立了一个不完整的进程,所以linux下的多线程是不共享数据区的;
帖子地点:http://www.ylmf.net/linux/tips/2010111810151.html
但是我写了个函数
看到两个线程是共享了数据区a 打印的没有重复的啊?
看别人的帖子里的;说linux内核在创建线程的时候做的do_fork 实际是建立了一个不完整的进程,所以linux下的多线程是不共享数据区的;
帖子地点:http://www.ylmf.net/linux/tips/2010111810151.html
但是我写了个函数
#include "errno.h"
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include
#include "unistd.h"
int a=0;
pthread_mutex_t hMutex = PTHREAD_MUTEX_INITIALIZER;
void *
threadFunc1(void *arg)
{
while(1)
{
pthread_mutex_lock(&hMutex);
(void)printf("aaa");
usleep(10);
a++;
printf("%d",a);
pthread_mutex_unlock(&hMutex);
pthread_yield();
}
return 0;
}
void *
threadFunc2(void *arg)
{
while(1)
{
pthread_mutex_lock(&hMutex);
usleep(5);
(void)printf("bbbn");
a++;
printf("%d",a);
pthread_mutex_unlock(&hMutex);
pthread_yield();
}
return 0;
}
int main(void)
{
pthread_t tid1, tid2;
printf("ccc");
pthread_setconcurrency(3);
pthread_create(&tid1, NULL, threadFunc1, NULL);
pthread_create(&tid2, NULL, threadFunc2, NULL);
fflush(NULL);
while(1)
{
usleep(1000);
fflush(NULL);
}
return 0;
}
看到两个线程是共享了数据区a 打印的没有重复的啊?
|
如果不共享,那还要线程同步做什么? 那还要线程私有数据做什么? 。。。
|
和windows是一样的。。。别想太多了。