如果我尝试锁定无效的pthread类型自旋锁,会发生什么?该场景可能发生在使用乐观同步的链表上,利用每个节点上的自旋锁,在找到所需节点的阶段和实际锁定它们之间。当我找到它们时,我对它们有一个有效的参考,但如果它们是例如,会发生什么。在我能锁定之前删除了?结果是试图锁定一个NULL指针 - 是否会导致程序终止,或者只是让pthread_spin_lock()
返回特定值?
答案 0 :(得分:2)
documentation很清楚:如果使用未初始化的自旋锁调用这些函数中的任何一个,结果是未定义的。
删除对象后,应将其视为未初始化状态。 (还取决于在这种情况下删除的定义是什么,我们没有澄清,所以可能还有其他警告。)
如果将NULL传递给函数,则未指定会发生什么。它可能会返回EINVAL:如果实现检测到pthread_spin_lock()或pthread_spin_trylock()的lock参数指定的值未引用初始化的自旋锁对象,则建议该函数失败并报告[EINVAL]错误。