POSIX 个线程 - 尝试锁定空自旋锁
POSIX threads - attempting lock on empty spinlock
如果我尝试锁定无效的 pthread 类型的自旋锁会怎样?该场景可能发生在使用乐观同步的链表上,在每个节点上使用自旋锁,在查找所需节点和实际锁定它们的阶段之间。当我找到它们时,我对它们有一个有效的参考,但是如果它们是,例如,会发生什么?在我能够锁定它们之前删除?结果将是尝试锁定 NULL 指针 - 这会导致程序终止,还是只会使 pthread_spin_lock()
return 具有特定值?
documentation 很清楚:如果使用未初始化的自旋锁调用这些函数中的任何一个,结果是未定义的。
对象被删除后,应该被视为处于未初始化状态。 (还取决于 deleted 在这种情况下的定义,我们没有明确说明,因此可能会有额外的警告。)
未指定如果将 NULL 传递给函数会发生什么情况。它可能会 return EINVAL: 如果实现检测到 pthread_spin_lock() 或 pthread_spin_trylock() 的锁定参数指定的值不引用初始化自旋lock对象,建议函数失败报[EINVAL]错误
如果我尝试锁定无效的 pthread 类型的自旋锁会怎样?该场景可能发生在使用乐观同步的链表上,在每个节点上使用自旋锁,在查找所需节点和实际锁定它们的阶段之间。当我找到它们时,我对它们有一个有效的参考,但是如果它们是,例如,会发生什么?在我能够锁定它们之前删除?结果将是尝试锁定 NULL 指针 - 这会导致程序终止,还是只会使 pthread_spin_lock()
return 具有特定值?
documentation 很清楚:如果使用未初始化的自旋锁调用这些函数中的任何一个,结果是未定义的。
对象被删除后,应该被视为处于未初始化状态。 (还取决于 deleted 在这种情况下的定义,我们没有明确说明,因此可能会有额外的警告。)
未指定如果将 NULL 传递给函数会发生什么情况。它可能会 return EINVAL: 如果实现检测到 pthread_spin_lock() 或 pthread_spin_trylock() 的锁定参数指定的值不引用初始化自旋lock对象,建议函数失败报[EINVAL]错误