【发布时间】:2016-04-10 23:36:01
【问题描述】:
如果我尝试锁定一个无效的 pthread 类型自旋锁会发生什么?该场景可能发生在使用乐观同步的链表上,在每个节点上使用自旋锁,介于查找所需节点和实际锁定它们的阶段之间。当我找到它们时,我对它们有一个有效的参考,但是如果它们是例如在我能够锁定它们之前删除?结果是试图锁定一个 NULL 指针——这会导致程序终止,还是只会让pthread_spin_lock() 返回一个特定的值?
【问题讨论】:
-
如果删除意味着不再是一个对象,那么你可以确定它是未定义的行为。
-
这对我正在尝试做的事情来说是一个好问题 - 对于大学练习,我被要求实现“乐观同步” - 即删除和添加节点在没有锁定的情况下搜索列表,锁定找到之后的节点,然后确保锁定的节点在列表中仍然有效,然后再继续。但后一种验证并没有解决看起来的主要问题——即在查找和锁定节点之间可能会发生一些事情。