淘先锋技术网

首页 1 2 3 4 5 6 7

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

4ab58da092eecade2dd655500048e49c.pngMutex

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

43492accebf5b896bc87ca1e4d29f2f5.png初始化

#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;

}

c973010bbbc891a3fe64afdca4e044ea.png运行结果

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

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

51520d7a550918dbc31e48b3c897e611.png

举报/反馈