我一直在研究多线程和共享资源访问,其中一个(对我来说)新的概念是互斥锁。但我似乎找不到答案,当一个“关键区域”被锁定时,发现它的线程会发生什么。很多地方都说该线程将被“阻塞”,但这意味着什么呢?它会被暂停,当锁解除时恢复吗?还是会在下一个“运行循环”迭代中尝试再次获取锁?
我提出这个问题的原因是,我想在我的辅助线程的运行循环的一个非常特定的部分中处理系统提供的事件(鼠标、键盘等)。所以无论传递什么事件,我都会将其排队在自己的数据结构中。显然,数据结构需要一个互斥锁,因为它被两个线程修改。缺失的拼图是:如果在主线程上的函数中传递了事件,我想将其排队,但队列被锁定了怎么办?主线程会被暂停吗,还是它只会跳过锁定部分并超出范围(丢失事件)?