微软相关函数说明:https://docs.microsoft.com/zh-cn/windows/win32/sync/synchronization-functions?redirectedfrom=MSDN
使用原子操作,不需要使用锁等重量级操作,可以设置一个变量,实现自旋锁,
enum
{
LOCK_IS_FREE = 0,
LOCK_IS_TAKEN = 1
};
typedef unsigned LOCK, *PLOCK;
void Lock(PLOCK pl)
{
// If *pl == LOCK_IS_FREE, it is set to LOCK_IS_TAKEN
// atomically, so only 1 caller gets the lock.
// If *pl == LOCK_IS_TAKEN,
// the result is LOCK_IS_TAKEN, and the while loop keeps spinning.
while (_InterlockedCompareExchange((long *)pl,
LOCK_IS_TAKEN, // exchange
LOCK_IS_FREE) // comparand
== LOCK_IS_TAKEN)
{
//

本文介绍了一种基于原子操作的自旋锁实现方法,并提供了详细的C语言代码示例。通过使用微软提供的原子函数,可以在不依赖锁的情况下实现资源同步。
4913

被折叠的 条评论
为什么被折叠?



