Linux线程同步互斥机制,Linux多线程——线程同步和互斥(一)互斥量

Linux实现线程同步和互斥的机制:互斥量、信号量、条件变量。其中互斥量分为4种,使用mutex的步骤及分类如图:函数说明见脑图。Linux/机器视觉学习

Linux线程同步互斥机制,Linux多线程——线程同步和互斥(一)互斥量_第1张图片Mutex

注意:互斥量初始化用静态和动态两种方式。动态方式通过pthread_mutex_init函数初始化,锁的类型由pthread_mutexattr_settype函数设置。

Linux线程同步互斥机制,Linux多线程——线程同步和互斥(一)互斥量_第2张图片初始化

#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多线程——线程同步和互斥(一)互斥量_第3张图片运行结果

线程创建:Linux多线程——线程创建

线程退出: Linux多线程——线程退出

Linux线程同步互斥机制,Linux多线程——线程同步和互斥(一)互斥量_第4张图片

举报/反馈

你可能感兴趣的:(Linux线程同步互斥机制)