⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmutex.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"vttest.h"#define NITEMS		100#define NTHREADS	16int		Buf[NTHREADS*NITEMS];int		Count;Vtmutex_t	Mutex;int		Inverted;#if __STD_Cvoid* stuff(void* arg)#elsevoid* stuff(arg)void*	arg;#endif{	int	n;	if(!Inverted && vtmtxlock(&Mutex) < 0)		terror("Can't lock mutex");	for(n = 0; n < NITEMS; ++n)	{		Buf[Count++] = (int)arg;#if _WIN32		Sleep(1);	/* give up thread control */#endif	}	if(!Inverted && vtmtxunlock(&Mutex) < 0)		terror("Can't unlock mutex");	return NIL(Void_t*);}main(){	Vthread_t*	vt[NTHREADS];	int		i, count[NTHREADS];	if(vtmtxopen(&Mutex, VT_INIT) != &Mutex)		terror("Can't create mutex");do_inverted:	if(Inverted)		tmesg("\tTesting non-locking threads\n");	else	tmesg("\tTesting locking threads\n");	/* prepare buffer */	for(i = 0; i < NTHREADS*NITEMS; ++i)		Buf[i] = -1;	Count = 0;	for(i = 0; i < NTHREADS; ++i)	{	if(!(vt[i] = vtopen(0,0)) )			terror("Can't create thread handle");		if(vtrun(vt[i], stuff, (Void_t*)i) < 0)			terror("Can't run thread %d", i);	}	for(i = 0; i < NTHREADS; ++i)		if(vtwait(vt[i]) < 0)			terror("Wait failed");	if(Count != NTHREADS*NITEMS)	{	if(!Inverted)			terror("Wrong Count");		else	tsuccess("Wrong Count as expected.");	}	for(i = 0; i < NTHREADS; ++i)		count[i] = 0;	for(i = 0; i < NTHREADS*NITEMS; i += NITEMS)	{	int	k;		count[Buf[i]] += 1;		for(k = 1; k < NITEMS; ++k)		{	if(Buf[k+i] != Buf[i])			{	if(!Inverted)					terror("Buffer messed up");				else	tsuccess("Buffer messed up as expected.");			}		}	}	for(i = 0; i < NTHREADS; ++i)	{	if(count[i] != 1 )		{	if(!Inverted)				terror("Count wrong");			else	tsuccess("Count wrong as expected.");		}	}	if(!Inverted)	{	tmesg("\t\tLocking threads work fine.");		Inverted = 1;		goto do_inverted;	}	else	tmesg("\t\tNon-locking threads also work - weird but ok!\n");	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -