作为一个IT人员,不断的学习和总结是咱们这个工作习气,所以我会将每个阶段的学习都会经过一点的总结来记载和检测自己的学习效果,今日为咱们总结了关于Linux下多线程编程技术:
1、线程的创立、停止及操控:
任何进程在启动时就已有了一个主线程,假如需求再生成线程则运用pthread_create函数,在该函数中能够指定线程的特点、线程例程、传给线程例程的参数。线程例程是一个用户自定义的函数,及线程履行的代码。当线程例程回来时,线程则完毕运转,也能够显现调用pthread_exit来退出。线程在创立后能够用pthread_self函数获取线程ID。函数pthread_join使得进程等候线程的停止,调用pthread_join后进程将被挂起,直到指定的某个线程(在pthread_join的参数thread中指定)停止。而pthread_detach函数正好相反,它使得进程不用等候线程的完毕,然后答应进程持续履行其他操作,被detach的线程在履行完毕后其占用的资源由体系主动回收。
2、线程间的互斥:
互斥操作,便是对某段代码或某个变量修正的时分只能有一个线程在履行这段代码,其他线程不能一同进入这段代码或一同修正变量。pthread常用pthread_mutex互斥体来完成线程互斥操作。pthread_mutex_init函数用于初始化一个互斥体变量。pthread_mutex_lock函数用于给互斥体变量上锁,假如上锁时互斥体现已被被的线程锁住了,那么调用该函数的线程将被堵塞直到互斥体被解锁停止。而pthread_mutex_trylock则是企图锁住互斥体,但在互斥体现已被加锁时不会形成堵塞,而是敏捷回来。pthread_mutex_unlock函数对互斥体解锁。pthread_mutex_destroy则用来开释互斥体所占资源。
3、线程的同步:
同步便是若干个线程等候某个事情的产生,当该事情产生时,一同开端持续履行。在Linux线程顶用条件变量来完成同步。函数pthread_cond_init用来创立一个条件变量。pthread_cond_wait和pthread_cond_TImewait用来等候条件变量被设置,值得注意的是这两个等候调用需求一个现已上锁的互斥体mutex,这是为了避免在真实进入等候状况之前其他线程有或许设置该条件变量而产生竞赛。pthread_cond_broadcast用于设置条件变量,即便事情产生,并使得一切等候该事情的线程不再堵塞。而pthread_cond_signal则是用免除某一个等候线程的堵塞状况。pthread_cond_destroy用来开释一个条件变量的资源。
4.实例
下面咱们还是以名的出产者/顾客问题为例来论述Linux线程的操控和通讯。一组出产者线程与一组顾客线程经过缓冲区产生联络。出产者线程将出产的产品送入缓冲区,顾客线程则从中取出产品。缓冲区有N 个,是一个环形的缓冲池。