POSIX线程 - 尝试锁定空的自旋锁

时间:2016-01-06 18:52:35

标签: c pthreads spinlock

如果我尝试锁定无效的pthread类型自旋锁,会发生什么?该场景可能发生在使用乐观同步的链表上,利用每个节点上的自旋锁,在找到所需节点的阶段和实际锁定它们之间。当我找到它们时,我对它们有一个有效的参考,但如果它们是例如,会发生什么。在我能锁定之前删除了?结果是试图锁定一个NULL指针 - 是否会导致程序终止,或者只是让pthread_spin_lock()返回特定值?

1 个答案:

答案 0 :(得分:2)

documentation很清楚:如果使用未初始化的自旋锁调用这些函数中的任何一个,结果是未定义的。

删除对象后,应将其视为未初始化状态。 (还取决于在这种情况下删除的定义是什么,我们没有澄清,所以可能还有其他警告。)

如果将NULL传递给函数,则未指定会发生什么。它可能会返回EINVAL:如果实现检测到pthread_spin_lock()或pthread_spin_trylock()的lock参数指定的值未引用初始化的自旋锁对象,则建议该函数失败并报告[EINVAL]错误。