阿里云网站建设部署与发布视频,装修房子的风格设计图软件,聚名网是什么,石材网站源码互斥 临界资源
一次只允许一个任务#xff08;进程#xff0c;线程)访问的共享资源 临界区
访问临界资源的代码 互斥机制
mutex互斥锁
任务访问临界资源前申请锁 访问完后释放锁 互斥锁初始化 #include pthread.h
int pthread_mutex_init(pthread_mutex_t *mute… 互斥 临界资源
一次只允许一个任务进程线程)访问的共享资源 临界区
访问临界资源的代码 互斥机制
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;
}
}