linux应用之----多线程

原创 2012年03月22日 19:21:45

多线程编程

线程理论:线程(thread)技术早在上世纪60年代就已经提出来了,但真正应用到多线程操作系统当中是在80年代中期。

线程想比与进程的两大优势:一是创建和维护一个线程的开销比创建和维护一个进程的开销要小的多。另外一个时线程间的通信比进程快速高效的多。具体来说就是,不同的进程有独立的进程空间,要进行数据传输必须依靠进程间的通信方式进行。这种方式不仅费时,而且很不方便。线程则不同,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其他线程所用。

Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写linux下的多线程程序需要使用头文件pthread.h.连接时需要使用库pthread.a

头文件    #include <pthread.h>

创建线程  int pthread_create(pthread_t *tipd,const pthread_attr_t *attr,函数指针,void*arg )

第一个参数用于存放线程ID,第二个参数是线程属性,填NULL,函数指针是指要通过线程运行的函数,最后一个是该函数的参数,必须是void *型的一个参数。

注意:因为pthread的库不是linux系统的库,所以在编译是要指定 -lpthread。

线程返回 调用结束或者exit(整个进程也将推出)或者是pthread_exit(void *return)

等待线程 pthread_join(pthread_t  id , void ** return)

为了解决多线程的资源竞争问题,提出了几种方法

互斥量   类型为:pthread_mutex_t。互斥量的使用,首先定义一个pthread_mutxe_t的变量x。然后通过函数 int pthread_mutex_init(&x,NULL)来进行初始化。对于某段代码,如果好几个线程都会调用,那么在这段代码前后加上:pthread_mutex_lock (&mutex);在结尾处加上pthread_mutex_unlock (&mutex); 那么这段代码就被很好的保护了起来,每次只允许一个线程使用。如果这段代码是访问临界资源的,那么就很好的保护了临界资源。需要提出的是在使用互斥锁的过程中很有可能会出现死锁:两个线程试图同时占用两个资源,并按不同的次序锁定相应的互斥锁,例如两个线程都需要锁定互斥锁1和互斥锁2a线程先锁定互斥锁1b线程先锁定互斥锁2,这时就出现了死锁。此时我们可以使用函数pthread_mutex_trylock,它是函数pthread_mutex_lock的非阻塞版本,当它发现死锁不可避免时,它会返回相应的信息 

另外还有条件变量和信号量。比较抽象,就不掌握了。

(14)多线程与并发库之java5同步集合类的应用【包含jdk1.5新特性 ConcurrentHashMap】

第一部分: 常用的集合类ArrayList、Map等在多线程操作同一对象时会发生不同步的线程而造成数据读取和写入错误;通常都是采用synchronized修饰符或Lock将那些方法括起来来确保它们在...
  • itm_hadf
  • itm_hadf
  • 2012年05月05日 21:22
  • 1828

哈夫曼编码树的C++实现

哈夫曼编码,参考与《算法导论》 //huffman_another solution #include #include #include #include using namespace s...
  • liuchenjane
  • liuchenjane
  • 2016年11月24日 17:38
  • 423

iOS8 study for ——iOS8新特性之扩展(Extension)

扩展(extension)是iOS8引入的新特性,
  • SakuraBurial
  • SakuraBurial
  • 2014年07月25日 18:37
  • 192

RMAN高级应用之Duplicate复制数据库(4)实战

  经过前面的准备工作,大展拳脚的时刻终于来临了。在正在创建复制之前,我们先来描述一下需求,一个明确的、清晰的、可实现的需求更加有助于我们操作的实施,所以语言描述能力也是一项非常高超的技巧,下面大家看...
  • junsisi
  • junsisi
  • 2007年12月06日 12:26
  • 658

linux应用之----进程通信

进程间通信基础 进程间通信的英文缩写: IPC  为什么需要进程间通信?数据传输,资源共享,通知事件,进程控制等。 Linux进程间通信方式(6种):管道,信号,消息队列,共享内存,信号量,套接...
  • cjnewstar111
  • cjnewstar111
  • 2012年03月22日 19:19
  • 266

十大最佳Android游戏下载平台

转载:十大最佳Android游戏下载平台 Android游戏的快速发展,让人感叹,后生可畏,不知道做为Android用户的您,是从哪里开始下载Android游戏的,甚至说你的手机第一张壁纸有事从哪儿...
  • wulong710
  • wulong710
  • 2013年05月03日 10:27
  • 1094

linux应用之--网络编程

linux网络编程     一:网络参考模型参考模型,如下图所示:          二:TCP/IP协议 TCP协议(传输控制协议)和UDP协议(用户数据包协议)是工作在传输层的...
  • cjnewstar111
  • cjnewstar111
  • 2012年03月22日 19:21
  • 295

linux应用之线程编程

linux应用之线程编程 线程概述     进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。 ...
  • xfcy1990
  • xfcy1990
  • 2016年05月18日 23:24
  • 119

程序猿讲述“性能优化”——Mysql千万级数据库优化技巧

一、MySQL的主要适用场景 1、Web网站系统 2、日志记录系统 3、数据仓库系统 4、嵌入式系统 二、MySQL架构图: 三:Mysql数据库优化技...
  • Gupaoxueyuan
  • Gupaoxueyuan
  • 2018年01月23日 16:29
  • 108

电商大数据应用之用户画像

用户画像的概念用户画像也叫用户信息标签化、客户标签。从电商角度看,根据客户在电商网站上所填的信息和客户行为,可以用一些标签把客户描绘出来,描述客户的标签就是用户画像。用户画像的内容用户画像的构建技术用...
  • sinat_22840937
  • sinat_22840937
  • 2017年12月02日 11:05
  • 174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux应用之----多线程
举报原因:
原因补充:

(最多只允许输入30个字)