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

linux多线程1

阅读更多

如果了解java多线程编程的话,照葫芦画瓢,是很容易理解linux下面的线程模型的。

 

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

//define the first thread procedure.
void * thread_1_pro(void * arg)
{
	//derive current thread's id
	pthread_t  tid;
	tid=pthread_self();
	printf(" AAAAA thread id is %u\n",(unsigned int)tid);
	int * p_int_a=(int *) arg;
	while(1)
	{
		sleep(5);	
		printf("------------- a = %d\n",*p_int_a);		
		(*p_int_a)++;
		printf("+++++++++++++ a = %d\n",*p_int_a);		
    }	
}

//define the second thread procedure.
void * thread_2_pro(void * arg)
{
	//derive current thread's id
	pthread_t  tid;
	tid=pthread_self();
	printf(" BBBB thread id is %u\n",(unsigned int)tid);
	int * p_int_a=(int *) arg;
	while(1)
	{
		sleep(3);
		printf("------------- b = %d\n",*p_int_a);	
		(*p_int_a)++;
		printf("+++++++++++++ b = %d\n",*p_int_a);
		
   }	
}


int main(int argc, char ** argv)
{
	pthread_t tidA, tidB;
	//derive current thread's id
	pthread_t  tid;
	tid=pthread_self();
	printf(" CCCCCC  thread id is %u\n",(unsigned int)tid);
    int common=0;
	pthread_create(&tidA, NULL, &thread_1_pro, &common);
	pthread_create(&tidB, NULL, &thread_2_pro, &common);
	sleep(12);
	//为什么需要最下面两行呢,如果没有,12秒后,主进程结束,会自动回收线程tidA, tidB,
	//这两行就是主进程中的线程要等这两个分支线程结束后,才执行join后面的内容。
	//pthread_join(tidA, NULL);
	//pthread_join(tidB, NULL);
	return 0;	
}

   输出结果:

 CCCCCC  thread id is 3078366912
 BBBB thread id is 3069971312
 AAAAA thread id is 3078364016
------------- b = 0
+++++++++++++ b = 1
------------- a = 1
+++++++++++++ a = 2
------------- b = 2
+++++++++++++ b = 3
------------- b = 3
+++++++++++++ b = 4
------------- a = 4
+++++++++++++ a = 5
------------- b = 5
+++++++++++++ b = 6

  可以看到这个结果还是蛮有规律的,但是我们想说的,如果仔细调整一下sleep的位置,输出的结果可能就没有上面这么规律了,如下。

//define the first thread procedure.
void * thread_1_pro(void * arg)
{
	//derive current thread's id
	pthread_t  tid;
	tid=pthread_self();
	printf(" AAAAA thread id is %u\n",(unsigned int)tid);
	int * p_int_a=(int *) arg;
	while(1)
	{
			
		printf("------------- a = %d\n",*p_int_a);		
		(*p_int_a)++;
		sleep(7);
		printf("+++++++++++++ a = %d\n",*p_int_a);		
    }	
}

//define the second thread procedure.
void * thread_2_pro(void * arg)
{
	//derive current thread's id
	pthread_t  tid;
	tid=pthread_self();
	printf(" BBBB thread id is %u\n",(unsigned int)tid);
	int * p_int_a=(int *) arg;
	while(1)
	{
		
		printf("------------- b = %d\n",*p_int_a);	
		(*p_int_a)++;
		sleep(3);
		printf("+++++++++++++ b = %d\n",*p_int_a);
		
   }	
}

  输出的结果如下:

 CCCCCC  thread id is 3077633728
 AAAAA thread id is 3077630832
------------- a = 0
 BBBB thread id is 3069238128
------------- b = 1
+++++++++++++ b = 2
------------- b = 2
+++++++++++++ b = 3
------------- b = 3
+++++++++++++ a = 4
------------- a = 4
+++++++++++++ b = 5
------------- b = 5
+++++++++++++ b = 6
------------- b = 6
+++++++++++++ a = 7
------------- a = 7
+++++++++++++ b = 8
------------- b = 8
+++++++++++++ b = 9
------------- b = 9

 和上面相比,显的比较乱,是因为没有“同步”的原因。

 

 

分享到:
评论

相关推荐

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

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

    linux多定时器多线程

    一、Linux多线程 1. **线程定义**:线程是程序执行的最小单位,一个进程可以包含多个线程,它们共享同一地址空间,资源利用率高,通信成本低。 2. **创建线程**:在Linux中,可以使用pthread库中的`pthread_create...

    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

    1. 多线程基础介绍 多线程编程是指在一个进程中同时执行多个线程的技术,能够提高应用程序的响应速度和效率。多线程编程可以应用于各种领域,例如 Web 服务器、数据库服务器、操作系统等。 2. 定义多线程术语 在...

    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 多线程编程

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

    linux多线程demo

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

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

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

    linux多线程教程.zip

    linux多线程教程.zip

Global site tag (gtag.js) - Google Analytics