日期:2014-05-16  浏览次数:20587 次

linux下的多线程共享数据区么?
“WIN32里同一个进 程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。”
看别人的帖子里的;说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 <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 打印的没有重复的啊?

------解决方案--------------------
如果不共享,那还要线程同步做什么?  那还要线程私有数据做什么? 。。。
------解决方案---------------