大家好,我是极客范的本期栏目编辑小友,现在为大家讲解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应用编程接口驱动未来神经网络应用的解决方案。
面向高端移动通信和汽车市场的四集群设计。
基于帧捕获的开源图形调试器的应用设计。
即将成为标准配置的最新安全技术:后视摄像头系统。