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的非阻塞版本,当它发现死锁不可避免时,它会返回相应的信息 

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

相关文章推荐

Linux 多线程应用中如何编写安全的信号处理函数

Linux 多线程应用中编写安全的信号处理函数 在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为...
  • prochsh
  • prochsh
  • 2013年03月08日 12:51
  • 536

Linux 多线程应用中的信号处理

Linux 多线程应用中的信号处理模型 在基于 Linux 的多线程应用中,对于因为程序逻辑需要而产生的信号,可考虑调用sigwait()使用同步模型进行处理。其程序流程如下: 主线程设置...
  • xb_0916
  • xb_0916
  • 2013年05月27日 15:23
  • 417

Linux 多线程应用中如何编写安全的信号处理函数

转载自http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/ Linux 多线程应用中编写安全的信号处理函数 在开发多线程应用...
  • webols
  • webols
  • 2012年04月22日 02:23
  • 344

linux下c++ 多线程的应用示例

·线程创建   函数原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,voi...

linux下c++多线程详解,应用于UDP

本文使用pthread的库,调用其中API可方便实现多线程效果。 本文主要讲解实际中用到的几个接口函数,足够一般开发使用。 实例为应用与UDP协议的收发,打开接收数据线程,接收不影响主线程,主线程...

Linux 系统应用编程——多线程经典问题(生产者-消费者)

“生产者——消费者”问题是Linux多线程编程中的经典问题,主要是利用信号量处理线程间的同步和互斥问题。          “生产者——消费者”问题描述如下:           有一个有...

多线程应用

  • 2015年03月17日 22:46
  • 1.16MB
  • 下载

java 多线程应用

  • 2013年09月12日 16:09
  • 221KB
  • 下载

wxpython应用多线程CallAfter来实现子页面向主页面传递消息的要求

本人最近在做一个wxpython的界面程序,其实程序也不是我写的,我只是在上面添加一些功能。最开始我是做的网络配置,就是界面可以对网络进行配置。针对系统是麒麟系统,其实其内核是Fedora的linux...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux应用之----多线程
举报原因:
原因补充:

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