当前位置: 代码迷 >> 综合 >> 旋转锁 SpinLock
  详细解决方案

旋转锁 SpinLock

热度:63   发布时间:2023-12-16 11:30:11.0
// nnnn.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include<windows.h>
#include <process.h>
#include <iostream>
using namespace std;LONG volatile g_bResourceInUse = FALSE;unsigned int __stdcall Func1(void *)
{while ( InterlockedExchange(&g_bResourceInUse,(LONG)TRUE) != 0 )//自旋锁,如果被占用了,则等待,sleep(0)会使系统切换到另一个线程Sleep(0);//access resoucefor (int i = 0 ; i < 1000 ;++i){cout<<i<<' ';}cout<<endl;InterlockedExchange(&g_bResourceInUse, (LONG)FALSE);return 0;
}int _tmain(int argc, _TCHAR* argv[])
{HANDLE hThread1 = (HANDLE)_beginthreadex(NULL , 0 , Func1 , NULL , CREATE_SUSPENDED , NULL);HANDLE hThread2 = (HANDLE)_beginthreadex(NULL , 0 , Func1 , NULL , CREATE_SUSPENDED , NULL);ResumeThread(hThread1);ResumeThread(hThread2);WaitForSingleObject(hThread1,INFINITE);WaitForSingleObject(hThread2,INFINITE);return 0;
}

  相关解决方案