线程间通信————互斥
?
???????????????????????????????????????????????????????????????? 互斥
?
臨界資源
一次只允許一個任務(進程,線程)訪問的共享資源
?
臨界區
訪問臨界資源的代碼
?
互斥機制
mutex互斥鎖
任務訪問臨界資源前申請鎖 訪問完后釋放鎖
?
互斥鎖初始化
?
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr *attr)
?
成功返回0 失敗返回錯誤碼
mutex指向要初始化的互斥鎖對象
attr 互斥鎖屬性 NULl表示缺省屬性
?
上鎖
?
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex)
?
成功返回0 失敗返回錯誤碼
mutex指向要初始化的互斥對象
如果無法獲得鎖 任務阻塞
?
解鎖
?
#include <pthread.h>
int phread_mutex_unlock(pthread_mutex_t *mutex)
?
成功返回0 失敗返回錯誤碼
mutex指向要初始化的互斥對象
執行完臨界區要及時釋放鎖
?
#include <uistd.h>
和sleep大致相同 不過它的單位是微秒
?
Ps:
unsigned int count, value1,, value2;
pthread_mutex_t lock
?
void *function(void *arg);
int main(void)
{
pthread_t a_thread;
?
if(pthread_mutex_init(&lock, NULL) != 0)
{
printf("fail to pthread_mutex_init\n");
exit(-1);
}
?
if(pthread_create(&a_thread, NULL, function, NULL) !=0 )
{
printf("fail to pthread_create");
exit(-1);
}
?
while(1)
{
count++;
?
#ifder _LOCK_
pthread_mutex_lock(&lock);
#endif
?
value1 = count;
value2 = count;
?
#ifder _LOCK_
pthread_mutex_unlock(&lock);
#endif
?
return 0;
}
}
?
void *function(void *arg)
{
while(1)
{
#ifder _LOCK_
pthread_mutex_lock(&lock)
#endif
?
if(value1 != value2)
{
printf("value1 = %u, value2 = %u\n", value1, value2);
usleep(100000);
}
?
#ifdef _LOCK_
pthread_mutex_unlock(&lock);
#endif
?
}
return NULL;
}
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的线程间通信————互斥的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue-router 不想存历史记录怎么
- 下一篇: 线程创建-结束-回收 教程