首页
社区
课程
招聘
[求助]【求助】关于多线程使用自旋锁(SpainLock)记数死锁的问题
发表于: 2018-9-4 11:43 2977

[求助]【求助】关于多线程使用自旋锁(SpainLock)记数死锁的问题

2018-9-4 11:43
2977
 Code:
#include <stdio.h>
#include <windows.h>
#include <process.h>

DWORD count = 0;
bool lock = FALSE;


//TS指令
bool TS(bool *lock)
{
	bool old;
	old = *lock;
	*lock = TRUE;
	return old;
}

void countproc(void *)
{
	
	
	do
	{
		while(TS(&lock));
		
		count++;
		printf("count:%d\n",count); //释放
		
		lock = FALSE;
	}while(1);
	
	_endthread();
}

int main(void)
{
	
	for(int i=0;i<2;i++)
		_beginthread(countproc,0,NULL);
	
	while(getchar() != 'q')
		;
	return 0;
}



多次运行后会出现死锁现象。
求助。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 776
活跃值: (3425)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
2
使用正规的线程锁或者临界区或者原子级操作。使用bool变量的话,可能存在两个线程同时进入TS导致一直卡死在里面的问题。
2018-9-4 13:12
0
雪    币: 1277
活跃值: (1058)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
加上volatile试试,这种写法都不规范,按1楼的来吧
2018-9-4 14:21
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不用ts包装吧,直接用全局的bool就可以.
2018-9-4 15:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢懂了。
2018-9-4 19:58
0
游客
登录 | 注册 方可回帖
返回
//