`
envy2002
  • 浏览: 153804 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

linux多线程2

阅读更多

下面我们将上面两个线程进行同步。

 

#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网络库

    Linux多线程服务端编程:使用muduo+C网络库.pdf Linux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:使用muduo+C网络库.pdfLinux多线程服务端编程:...

    linux多线程编程.pdf

    Linux多线程编程是操作系统中并发程序设计的一个重要领域,它允许开发者在同一程序中创建多个线程,以实现并行执行,从而提高程序的执行效率和响应能力。Linux下的多线程编程通常基于POSIX线程(pthread)库来实现,...

    Linux多线程服务端编程

    Linux多线程服务端编程是陈硕大神的一本linux服务端开发实战书籍。

    Linux多线程服务端编程,高清无水印!~

    Linux多线程服务端编程,高清无水印!~

    嵌入式软件开发技术:第5章 嵌入式Linux多线程编程.ppt

    嵌入式Linux多线程编程 嵌入式Linux多线程编程是嵌入式系统开发中的一种重要技术,能够提高系统的效率和响应速度。本章节将详细介绍嵌入式Linux多线程编程的基本概念、线程的创建、同步和互斥、线程属性、多线程...

    Linux系统下的多线程编程入门.pdf

    在Linux系统下进行多线程编程是开发高效并发应用程序的关键技术之一。本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程...

    linux_code.rar_linux 多线程_linux 线程_多线程编程

    "linux_code.rar"这个压缩包包含了一些关于Linux多线程编程的源码示例,这对于初学者来说是一份宝贵的教育资源。 1. **线程概念**: 线程是操作系统分配处理器时间的基本单元,它是程序中的执行流。与进程相比,...

    Linux下的多线程编程.pdf

    "Linux下的多线程编程" Linux下的多线程编程是一种高效的程序设计方法,它可以将一个程序的任务划分为多个部分,每个部分是一个顺序控制流。多线程编程可以实现并行计算,高效利用多处理器,并且具有许多优点,如...

    linux多线程编程手册.pdf

    2. 定义多线程术语 在多线程编程中,一些重要的术语需要了解,如线程(Thread)、进程(Process)、同步(Synchronization)、互斥锁(Mutex)、信号量(Semaphore)等。这些术语是理解多线程编程的基础。 3. 符合...

    Linux多线程编程手册

    Linux多线程编程是计算机编程中一个高级主题,涉及到同时执行多个任务的能力,这些任务共享公共地址空间。它允许程序更有效地利用多核处理器的能力,提高性能和响应速度,优化资源利用,并改善程序的结构。Linux多...

    Linux多线程编程_linux多线程_Linux多线程;应用笔记_columnc9g_

    在Linux多线程编程中,我们通常使用POSIX线程库(pthread),它提供了跨平台的线程创建、同步和通信功能。下面是一些关键知识点: 1. **线程创建**:pthread库的`pthread_create()`函数用于创建新线程。它需要传入...

    Linux多线程服务端编程-使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Linux多线程服务端编程 使用muduo C++网络库_陈硕

    Linux多线程服务端编程 使用muduo C++网络库_陈硕

    linux多线程demo

    这个"linux多线程demo"示例可能是一个用于教学或实践的项目,通过CMake构建系统进行编译,适用于嵌入式环境,比如ARM架构设备。让我们深入探讨一下多线程、CMake以及在嵌入式Linux中的应用。 **多线程** 多线程允许...

    Linux多线程服务端编程:使用muduo C++网络库

    本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能...

    linux 多线程编程

    Linux 多线程编程 Linux 多线程编程是操作系统课程设计的重要组成部分,多线程技术早在 60 年代就被提出,但真正应用多线程到操作系统中去,是在 80 年代中期,solaris 是这方面的佼佼者。传统的 Unix 也支持线程的...

    linux多线程教程.zip

    linux多线程教程.zip

    Linux下C语言多线程编程实例

    Linux 下 C 语言多线程编程实例 Linux 下的多线程编程是一种非常重要的技术,在实际应用中有非常广泛的应用范围。多线程编程可以大大提高程序的执行效率和响应速度。但是,多线程编程也存在一些复杂性,例如线程...

Global site tag (gtag.js) - Google Analytics