完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
在线程对共享相同内存操作时,就会出现多个线程对同一资源的使用,为此,需要对这些线程进行同步,以确保它们在访问共享内存的时候不会访问到无效的数值。
以下是线程的几种同步方式: 1、 互斥量。 通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据。互斥量从本质上讲是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。如下例所示,就是互斥量对共享数据的操作: #include #include int value = 5;//共享变量 pthread_mutex_t mutex;//互斥变量 void *mythread1(); void mainshow(); int main() { int retval; pthread_t tid1; retval = pthread_create(&tid1,NULL,mythread1,&value);//创建线程 if(retval != 0){printf(“Can not create mythread1/n”); mainshow(); retval = pthread_join(&tid1,NULL);//等待线程mythread1结束 if(retval != 0){printf(“Can not join with mythread./n”); printf(“value = %d/n”,value); return 0; } void *mythread1() { int retval; retval = pthread_mutex_lock(&mutex);//上锁 value = value + 1;//对共享变量的操作 printf(“value = %d/n”,value); retval = pthread_mutex_unlock(&mutex);//解锁 pthread_exit((void *)0); } void myshow() { int retval; retval = pthread_mutex_lock(&mutex);//上锁 value = value + 1;//对共享变量的操作 printf(“value = %d/n”,value); pthread_mutex_unlock(&mutex);//解锁 } 2、信号量 该信号量是Posix提供的基于内存的信号量,它们由应用程序分配信号量的内存空间。如下例所示,就是信号量对共享数据的操作: #include #include #include int value = 5; sem_t sem1,sem2; void mainshow(); void *mythread(); 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); mainshow(); pthread_join(tid,NULL); printf(“value3 = %d/n”,value); return 0; } void *mythread() { int retval; retval = sem_wait(&sem1); value = value + 1; printf(“value1 = %d/n”,value); retval = sem_post(&sem2); pthread_exit((void *) 0); } void mainshow() { int retval; retval = sem_wait(&sem2); value = value + 1; printf(“value2 = %d/n”,value); retval = sem_post(&sem1); }。 |
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2360 浏览 5 评论
3207 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
662浏览 1评论
898浏览 0评论
1020浏览 0评论
665浏览 0评论
494浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 15:46 , Processed in 1.218735 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号