大佬教程收集整理的这篇文章主要介绍了c – 如何使用pthreads读/写共享变量?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
线程1:
pthread_mutex_lock( &lattice_mutex ); if (!newData) { pthread_mutex_unlock( &lattice_mutex ); uchar *lattice_pos = lattice; int i; for(i=0; i<size; i++) { *lattice_pos = rand()%CHAR_MAX; lattice_pos++; } pthread_mutex_lock( &lattice_mutex ); newData = TRUE; pthread_mutex_unlock( &lattice_mutex ); } else { pthread_mutex_unlock( &lattice_mutex ); }
线程2:
pthread_mutex_lock( &lattice_mutex ); if(newData) { pthread_mutex_unlock( &lattice_mutex ); renderupdate(); pthread_mutex_lock( &lattice_mutex ); newData = falSE; pthread_mutex_unlock( &lattice_mutex ); } else { pthread_mutex_unlock( &lattice_mutex ); }
第二个版本,但有效,但我不知道它是否正确:
线程1:
if (!newData) { uchar *lattice_pos = lattice; int i; for(i=0; i<size; i++) { *lattice_pos = rand()%CHAR_MAX; lattice_pos++; } pthread_mutex_lock( &lattice_mutex ); newData = TRUE; pthread_mutex_unlock( &lattice_mutex ); }
线程2:
if(newData) { renderupdate(); pthread_mutex_lock( &lattice_mutex ); newData = falSE; pthread_mutex_unlock( &lattice_mutex ); }
线程1:作家
pthread_mutex_lock(&lattice_muteX); if (!newData) { pthread_mutex_unlock(&lattice_muteX); // Omit? uchar *lattice_pos = lattice; int i; for (i = 0; i < size; i++) *lattice_pos++ = rand() % CHAR_MAX; pthread_mutex_lock(&lattice_muteX); // Omit? newData = TRUE; } pthread_mutex_unlock(&lattice_muteX);
线程2:读者
pthread_mutex_lock(&lattice_muteX); if (newData) { pthread_mutex_unlock(&lattice_muteX); // Omit? renderupdate(); pthread_mutex_lock(&lattice_muteX); // Omit? newData = falSE; } pthread_mutex_unlock(&lattice_muteX);
它取决于格子信息的确切使用方式,但考虑到互斥体的名称,我认为你应该在修改晶格时保持锁定,因此标记为“忽略”的两对线条?应该删除.否则,不保护晶格不受并发访问的影响.
补充:我认为第二个版本是错误的 – 它没有正确保护晶格.
以上是大佬教程为你收集整理的c – 如何使用pthreads读/写共享变量?全部内容,希望文章能够帮你解决c – 如何使用pthreads读/写共享变量?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。