您的位置首页>企业动态>

Linux多线程同步方法

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux多线程同步方法问题。以下是线程的几种同步方式:1、 互斥量。通过使用pthrea

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux多线程同步方法问题。

以下是线程的几种同步方式:

1、 互斥量。

通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上讲是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。如下例所示,就是互斥量对共享数据的操作:

#包含stdio.h

#包含pthread.h

(同Internationalorganizations)国际组织值=5;//共享变量

pthread _ mutex _ t mutex//互斥变量

void * myth read 1();

void main how();

int main()

{

int retval

pthread _ t TId1

retval=pthread_create(TId1,NULL,mythread1,value);//创建线程

if(retval!=0){printf("无法创建神话1 \ n");

main show();

retval=pthread_join(TId1,NULL);//等待线程神话一结束

if(retval!=0){printf("不能与流言蜚语联接\ n");

printf("值=%d\n",值);

返回0;

}

void *mythread1()

{

int retval

ret val=pthread _ mutex _ lock(mutex);//上锁

值=值1;//对共享变量的操作

printf('值=%d\n ',值);

ret val=pthread _ mutex _ unlock(mutex);//解锁

pthread _ exit((void *)0);

}

void myshow()

{

int retval

ret val=pthread _ mutex _ lock(mutex);//上锁

值=值1;//对共享变量的操作

printf("值=%d\n",值);

pthread_mutex_unlock(互斥体);//解锁

}

2、信号量

该信号量是简便操作系统提供的基于内存的信号量,它们由应用程序分配信号量的内存空间。如下例所示,就是信号量对共享数据的操作:

#包含stdio.h

#包含pthread.h

#包含信号量。h

(同Internationalorganizations)国际组织值=5;

sem_t sem1、SEM 2;

void main how();

void *神话read();

int main()

{

int retval

pthread _ t TId

retval=sem_init(sem1,0,0);

retval=sem_init(sem2,0,1);

retval=pthread_create(tid,NULL,mythread,NULL);

main show();

pthread_join(tid,NULL);

printf('value3=%d\n ',值);

返回0;

}

void *mythread()

{

int retval

ret val=SEM _ wait(SEM 1);

值=值1;

printf('value1=%d\n ',值);

ret val=SEM _ post(SEM 2);

pthread _ exit((void *)0);

}

void mainshow()

{

int retval

ret val=SEM _ wait(SEM 2);

值=值1;

printf('value2=%d\n ',值);

ret val=SEM _ post(SEM 1);

}

以下是线程的几种同步方式:

1、 互斥量。

通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上讲是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。如下例所示,就是互斥量对共享数据的操作:

#包含stdio.h

#包含pthread.h

(同Internationalorganizations)国际组织值=5;//共享变量

pthread _ mutex _ t mutex//互斥变量

void * myth read 1();

void main how();

int main()

{

int retval

pthread _ t TId1

retval=pthread_create(TId1,NULL,mythread1,value);//创建线程

if(retval!=0){printf("无法创建神话1 \ n");

main show();

retval=pthread_join(TId1,NULL);//等待线程神话一结束

if(retval!=0){printf("不能与流言蜚语联接\ n");

printf("值=%d\n",值);

返回0;

}

void *mythread1()

{

int retval

ret val=pthread _ mutex _ lock(mutex);//上锁

值=值1;//对共享变量的操作

printf('值=%d\n ',值);

ret val=pthread _ mutex _ unlock(mutex);//解锁

pthread _ exit((void *)0);

}

void myshow()

{

int retval

ret val=pthread _ mutex _ lock(mutex);//上锁

值=值1;//对共享变量的操作

printf("值=%d\n",值);

pthread_mutex_unlock(互斥体);//解锁

}

2、信号量

该信号量是简便操作系统提供的基于内存的信号量,它们由应用程序分配信号量的内存空间。如下例所示,就是信号量对共享数据的操作:

#包含stdio.h

#包含pthread.h

#包含信号量。h

(同Internationalorganizations)国际组织值=5;

sem_t sem1、SEM 2;

void main how();

void *神话read();

int main()

{

int retval

pthread _ t TId

retval=sem_init(sem1,0,0);

retval=sem_init(sem2,0,1);

retval=pthread_create(tid,NULL,mythread,NULL);

main show();

pthread_join(tid,NULL);

printf('value3=%d\n ',值);

返回0;

}

void *mythread()

{

int retval

ret val=SEM _ wait(SEM 1);

值=值1;

printf('value1=%d\n ',值);

ret val=SEM _ post(SEM 2);

pthread _ exit((void *)0);

}

void mainshow()

{

int retval

ret val=SEM _ wait(SEM 2);

值=值1;

printf('value2=%d\n ',值);

ret val=SEM _ post(SEM 1);

}

技术区

Alexa语音服务软件扩展了STM32Cube。

使用DNN应用编程接口驱动未来神经网络应用的解决方案。

面向高端移动通信和汽车市场的四集群设计。

基于帧捕获的开源图形调试器的应用设计。

即将成为标准配置的最新安全技术:后视摄像头系统。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。