六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

linux多线程2

[复制链接]

升级  10.33%

65

主题

65

主题

65

主题

举人

Rank: 3Rank: 3

积分
231
 楼主| 发表于 2013-1-31 02:49:34 | 显示全部楼层 |阅读模式
下面我们将上面两个线程进行同步。
 
#include <pthread.h>#include <stdio.h>#include <unistd.h>//初始化一个mutex(互斥体).pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;//define the first thread procedue.void * thread_1_pro(void * arg){int * p_int_a=(int *) arg;while(1){pthread_mutex_lock(&counter_mutex);printf("------------- a = %d\n",*p_int_a);(*p_int_a)++; sleep(7);printf("+++++++++++++ a = %d\n",*p_int_a);pthread_mutex_unlock(&counter_mutex);//must add this sleep, give the chance to wake up thread_2_pro.    sleep(3);    }}void * thread_2_pro(void * arg){int * p_int_a=(int *) arg;while(1){pthread_mutex_lock(&counter_mutex);printf("------------- b = %d\n",*p_int_a);(*p_int_a)++;sleep(3);printf("+++++++++++++ b = %d\n",*p_int_a);pthread_mutex_unlock(&counter_mutex);//must add this sleep, give the chance to wake up thread_1_pro.        sleep(3);   }}int main(int argc, char ** argv){pthread_t tidA, tidB;    int common=0;pthread_create(&tidA, NULL, &thread_1_pro, &common);pthread_create(&tidB, NULL, &thread_2_pro, &common);sleep(120);//为什么需要最下面两行呢,如果没有,12秒后,主进程结束,会自动回收线程tidA, tidB,//这两行就是主进程中的线程要等这两个分支线程结束后,才执行join后面的内容。//pthread_join(tidA, NULL);//pthread_join(tidB, NULL);return 0;return 0;}    输出结果:
    可以看到,linux多线程和java多线程几乎一摸一样的。唯一的区别,好像就是在mutex后面必须加个sleep,有更多
    的机会让别的线程获得机会去执行,如果不加这个,执行结果是完全不一样的。
------------- a = 0+++++++++++++ a = 1------------- b = 1+++++++++++++ b = 2------------- a = 2+++++++++++++ a = 3------------- b = 3+++++++++++++ b = 4------------- a = 4+++++++++++++ a = 5------------- b = 5+++++++++++++ b = 6------------- a = 6+++++++++++++ a = 7------------- b = 7+++++++++++++ b = 8------------- a = 8
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表