在linux中用C语言实现死锁

在linux中用C语言实现死锁,第1张

设置状态变量lock=0,在占用资源的函数中,设置lock=1;并在处理结束后设lock=0.

比如:

bool lock=0

int scan()

{

while(lock!=0) //循环检测,直到资源释放才执行下面的语句

lock=1//锁定资源

...//具体的执行扫描的语句

lock=1//释放资源

return 0

}

这个方法容易实现,但是占用CPU,假定其他线程正在占用扫描仪,那么这个线程就会在自己的时间片内不停的执行while语句直到对方释放扫描仪。由此造成了浪费。

现在流行的做法是通过中断信号来做,那是一本书的内容,建议看linux内核编程方面的书。

不同线程要按照相同顺序进行加解锁。

设置互斥量属性为PTHREAD_MUTEX_ERRORCHECK(如果一个线程试图对一个互斥锁重复锁定,将会返回一个错误代码,从根本上避免死锁

设置互斥量属性为PTHREAD_MUTEX_RECURSIVE(允许对一个互斥量多次加锁,如:加锁3次,也要解锁3次才能真正释放该锁)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8335920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存