Linux实现线程同步和互斥的机制:互斥量、信号量、条件变量。其中互斥量分为4种,使用mutex的步骤及分类如图:函数说明见脑图。Linux/机器视觉学习
Mutex
注意:互斥量初始化用静态和动态两种方式。动态方式通过pthread_mutex_init函数初始化,锁的类型由pthread_mutexattr_settype函数设置。
初始化
#include
#include
#include
#include
#include
#include
char str[]="abcdefghijklmn";
pthread_mutex_t mutex;
int index2=0;
void *exe_process(void *arg){
while(index2
pthread_mutex_lock(&mutex);//加锁
printf("the %dth element of array is %c\n",index2,str[index2]);
sleep(1);
index2++;
pthread_mutex_unlock(&mutex);//解锁
}
}
int main(){
pthread_t pid_1,pid_2;
int error_1,error_2;
pthread_mutexattr_t *lock;
pthread_mutexattr_settype(lock,PTHREAD_MUTEX_RECURSIVE_NP); //设置互斥量类型
// PTHREAD_MUTEX_TIMED_NP,缺省值,普通锁
//PTHREAD_MUTEX_RECURSIVE_NP,嵌套锁
// PTHREAD_MUTEX_ERRORCHECK_NP,检错锁
//PTHREAD_MUTEX_ADAPTIVE_NP 适应锁
pthread_mutex_init(&mutex,lock);
//初始化线程锁,将lock改为NULL则设置为默认值,普通锁。
error_1=pthread_create(&pid_1,NULL,exe_process,NULL);
error_2=pthread_create(&pid_2,NULL,exe_process,NULL);
if(error_1!=0||error_2!=0){
printf("pthread create error!\n");
return 1;
}
pthread_join(pid_1,NULL);
pthread_join(pid_2,NULL);
return 0;
}
运行结果
线程创建:Linux多线程——线程创建
线程退出: Linux多线程——线程退出
举报/反馈