Linux线程-互斥锁pthread_mutex_t
来源:互联网 发布:耽美网络剧资源 编辑:程序博客网 时间:2024/06/05 02:19
在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁 的使用过程中,主要有 pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock 这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。互斥锁的范围:可以指定是该进程与其他进程的同步还是同一进程内不同的线程之间的同步。可以设置为PTHREAD_PROCESS_SHARE和PTHREAD_PROCESS_PRIVATE。默认是后者,表示进程内使用锁。
pthread_mutexattr_setpshared(pthread_mutexattr_t *mattr, int pshared)pthread_mutexattr_getshared(pthread_mutexattr_t *mattr,int *pshared)
- 互斥锁的类型:
- PTHREAD_MUTEX_TIMED_NP,这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按优先级获得锁。这种锁策略保证了资源分配的公平性。
- PTHREAD_MUTEX_RECURSIVE_NP,嵌套锁,允许同一个线程对同一个锁成功获得多次,并通过多次unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新竞争。
- PTHREAD_MUTEX_ERRORCHECK_NP,检错锁,如果同一个线程请求同一个锁,则返回EDEADLK,否则与PTHREAD_MUTEX_TIMED_NP类型动作相同。这样就保证当不允许多次加锁时不会出现最简单情况下的死锁。
- PTHREAD_MUTEX_ADAPTIVE_NP,适应锁,动作最简单的锁类型,仅等待解锁后重
pthread_mutexattr_settype(pthread_mutexattr_t *attr , int type)
pthread_mutexattr_gettype(pthread_mutexattr_t *attr , int *type)示例:
#include <pthread.h>#include <stdio.h>pthread_mutex_t mutex ;void *print_msg(void *arg){ int i=0; pthread_mutex_lock(&mutex); for(i=0;i<15;i++){ printf("output : %d\n",i); usleep(100); } pthread_mutex_unlock(&mutex);}int main(int argc,char** argv){ pthread_t id1; pthread_t id2; pthread_mutex_init(&mutex,NULL); pthread_create(&id1,NULL,print_msg,NULL); pthread_create(&id2,NULL,print_msg,NULL); pthread_join(id1,NULL); pthread_join(id2,NULL); pthread_mutex_destroy(&mutex); return 1;}
0 0
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- Linux线程-互斥锁pthread_mutex_t
- 【Leetcode Algorithm】Roman to Integer
- IM消息的显示方法和装置-专利
- 总结:接口、类、抽象类、继承、构造函数、方法重写、方法重载、自动转型、多态、引用传递
- Android程序:使用SeekBar实现滑动进度条功能
- c# lock
- Linux线程-互斥锁pthread_mutex_t
- Expression is not assignable
- android开发网络资源
- JSON.parse和eval的区别
- 【Leetcode Algorithm】Reverse Linked List
- iOS中对时间的处理(一)——获取当前时间戳
- PLSQL下复制表/将一张表插入另一张表中/连接两张表
- TCP/IP协议详解目录
- 细说Drupal,Joomla,Wordpress的区别