下面我们将上面两个线程进行同步。
#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
分享到:
相关推荐
Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程Linux多线程
linux多线程编程.pdf
Linux多线程服务端编程,高清无水印!~
Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程 Linux多线程服务端编程
Linux 多线程编程笔记——简单、好记、好用说明:本代码参考麦子学院魏杰老师的Linux多线程编程 视频教程,整理有参考网上的做出修改,自己也可以参考网上比较好的例程
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
linux多线程教程.zip
嵌入式软件开发技术:第5章 嵌入式Linux多线程编程.ppt
本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...
linux多线程编程 声明:本文是网上整理的资料,版权属其作者本人所有。 1 第一章 线程基础知识 2 一.什么是线程 2 二.线程的优点 2 三.线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程...
Linux下的多线程编程.pdf
Linux多线程服务端编程 使用muduo C++网络库_陈硕
Linux系统下的多线程编程入门
linux 多线程编程 操作系统课程设计
linux 系统的编程的源码,对初学者很有帮助。多线程、内存、信号量等程序。
linux下多线程编程linux下多线程编程linux下多线程编程linux下多线程编程linux下多线程编程
linux多线程编程.
linux系统下建立多线程程序设计,完成UDP网络通信的发送与接收,包括总结与源代码,实测效果可见链接https://blog.csdn.net/zxp121127/article/details/78506081