
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,并发编程开发成为了大多数程序员都在使用的一种开发方式,而今天我们就通过案例分析来了解一下,并发编程开发中锁的处理方式。
在C或者其它编程语言的并发编程中,主要存在两种通信(IPC):
进程间通信:管道、消息队列、信号等
线程间通信:互斥锁、条件变量等
利用以上通信手段采取的同步措施,是为了达到以下两种目的:
维持共享数据一致性,并发安全
控制流程管理,更好的协同工作
锁的两种通常处理方式
一种是没有获取到锁的线程就一直循环等待判断该资源是否已经释放锁,这种锁叫做自旋锁,它不用将线程阻塞起来(NON-BLOCKING);
还有一种处理方式就是把自己阻塞起来,等待重新调度请求,这种叫做互斥锁。
饥饿模式
当互斥锁不断地试图获得一个永远无法获得的锁时,它可能会遇到饥饿问题。
读写锁
读写锁和上面的多也差不多,有这么几种情况
在写锁已被锁定的情况下试图锁定写锁,会阻塞当前的goroutine。
在写锁已被锁定的情况下试图锁定读锁,会阻塞当前的goroutine。
在读锁已被锁定的情况下试图锁定写锁,会阻塞当前的goroutine。
在读锁已被锁定的情况下试图锁定读锁,不会阻塞当前的goroutine。
panic错误
无论是互斥锁还是读写锁在程序运行时一定是成对的,不然就会引发不可恢复的panic。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。