关闭

linux应用之----多线程

279人阅读 评论(0) 收藏 举报

多线程编程

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

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:52910次
    • 积分:881
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:4篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论