首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux上的多线程共享数据区么

2012-08-14 
linux下的多线程共享数据区么?“WIN32里同一个进 程里各个线程之间是共享数据段的。这才是与Linux的进程最大

linux下的多线程共享数据区么?
“WIN32里同一个进 程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。”
看别人的帖子里的;说linux内核在创建线程的时候做的do_fork 实际是建立了一个不完整的进程,所以linux下的多线程是不共享数据区的;
帖子地点:http://www.ylmf.net/linux/tips/2010111810151.html
但是我写了个函数

C/C++ code
#include "errno.h" #include "stdio.h" #include "stdlib.h" #include "time.h" #include <pthread.h>#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("bbb\n");        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是一样的。。。别想太多了。

热点排行