下面我们将上面两个线程进行同步。
#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多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...
Linux多线程编程是操作系统中并发程序设计的一个重要领域,它允许开发者在同一程序中创建多个线程,以实现并行执行,从而提高程序的执行效率和响应能力。Linux下的多线程编程通常基于POSIX线程(pthread)库来实现,...
Linux多线程服务端编程是陈硕大神的一本linux服务端开发实战书籍。
Linux多线程服务端编程,高清无水印!~
嵌入式Linux多线程编程 嵌入式Linux多线程编程是嵌入式系统开发中的一种重要技术,能够提高系统的效率和响应速度。本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程...
在Linux系统下进行多线程编程是开发高效并发应用程序的关键技术之一。本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程...
"linux_code.rar"这个压缩包包含了一些关于Linux多线程编程的源码示例,这对于初学者来说是一份宝贵的教育资源。 1. **线程概念**: 线程是操作系统分配处理器时间的基本单元,它是程序中的执行流。与进程相比,...
"Linux下的多线程编程" Linux下的多线程编程是一种高效的程序设计方法,它可以将一个程序的任务划分为多个部分,每个部分是一个顺序控制流。多线程编程可以实现并行计算,高效利用多处理器,并且具有许多优点,如...
2. 定义多线程术语 在多线程编程中,一些重要的术语需要了解,如线程(Thread)、进程(Process)、同步(Synchronization)、互斥锁(Mutex)、信号量(Semaphore)等。这些术语是理解多线程编程的基础。 3. 符合...
Linux多线程编程是计算机编程中一个高级主题,涉及到同时执行多个任务的能力,这些任务共享公共地址空间。它允许程序更有效地利用多核处理器的能力,提高性能和响应速度,优化资源利用,并改善程序的结构。Linux多...
在Linux多线程编程中,我们通常使用POSIX线程库(pthread),它提供了跨平台的线程创建、同步和通信功能。下面是一些关键知识点: 1. **线程创建**:pthread库的`pthread_create()`函数用于创建新线程。它需要传入...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
Linux多线程服务端编程 使用muduo C++网络库_陈硕
这个"linux多线程demo"示例可能是一个用于教学或实践的项目,通过CMake构建系统进行编译,适用于嵌入式环境,比如ARM架构设备。让我们深入探讨一下多线程、CMake以及在嵌入式Linux中的应用。 **多线程** 多线程允许...
本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...
Linux 多线程编程 Linux 多线程编程是操作系统课程设计的重要组成部分,多线程技术早在 60 年代就被提出,但真正应用多线程到操作系统中去,是在 80 年代中期,solaris 是这方面的佼佼者。传统的 Unix 也支持线程的...
linux多线程教程.zip
Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在实际应用中有非常广泛的应用范围。多线程编程可以大大提高程序的执行效率和响应速度。但是,多线程编程也存在一些复杂性,例如线程...