CVI多线程数据保护(安全变量)

DefineThreadSafeScalarVar(,,);此函数应用
#include <windows.h>
#include <stdio.h>  
#include <utility.h>
int CVICALLBACK ThreadFunction (void *functionData);
int CVICALLBACK ThreadFunction1 (void *functionData);
int CVICALLBACK ThreadFunction2 (void *functionData);
//int CVICALLBACK ThreadFunction3 (void *functionData);
int threadID;
int threadID1;
int threadID2;
//int threadID3;
long g_nNum = 0;
long g_nNum1 = 0;
long g_nNum2 = 0;
static int startflag = 0;
static int startflag1 = 0;
static int startflag2 = 0;
//static int startflag3 = 0; 
DefineThreadSafeScalarVar(long,g_nNum,0);
DefineThreadSafeScalarVar(long,g_nNum1,0);
DefineThreadSafeScalarVar(long,g_nNum2,0);
int main()  
{   
	Initializeg_nNum();
	Initializeg_nNum1();
	Initializeg_nNum2();
	CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadFunction1 ,NULL ,&threadID1);

	CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadFunction ,NULL ,&threadID);


	
	CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadFunction2 ,NULL ,&threadID2);
	
	startflag1 = 1; 
	startflag = 1; 
	startflag2 = 1; 
    
	CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE,threadID, OPT_TP_PROCESS_EVENTS_WHILE_WAITING);  
	CmtReleaseThreadPoolFunctionID (DEFAULT_THREAD_POOL_HANDLE, threadID);
	CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE,threadID1, OPT_TP_PROCESS_EVENTS_WHILE_WAITING);  
	CmtReleaseThreadPoolFunctionID (DEFAULT_THREAD_POOL_HANDLE, threadID1);
	CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE,threadID2, OPT_TP_PROCESS_EVENTS_WHILE_WAITING);  
	CmtReleaseThreadPoolFunctionID (DEFAULT_THREAD_POOL_HANDLE, threadID2);
	Uninitializeg_nNum();
	Uninitializeg_nNum1();
	Uninitializeg_nNum2();
	return 0;
}
int CVICALLBACK ThreadFunction (void *functionData)
{
	long *g_nNumPtr;
	long *g_nNumPtr2;
	while(startflag)
	{
		Sleep(0);//some work should to do  
	    g_nNumPtr = GetPointerTog_nNum();
        (*g_nNumPtr)++;
		ReleasePointerTog_nNum();
		
		g_nNumPtr2 = GetPointerTog_nNum2();
        (*g_nNumPtr2)++;
		ReleasePointerTog_nNum2();
	//	printf("全局资源值1为%d 全局资源值1为%d\n", g_nNum,g_nNum2);
    	Sleep(100);//some work should to do  
		  
	}
    return 0;  
}
int CVICALLBACK ThreadFunction2 (void *functionData)
{
	long *g_nNumPtr1; 
	while(startflag2)
	{
		Sleep(0);//some work should to do  
        g_nNumPtr1 = GetPointerTog_nNum1();
        (*g_nNumPtr1)++;
		ReleasePointerTog_nNum1();
	//	printf("全局资源值2为%d\n", g_nNum1);
    	Sleep(200);//some work should to do  
	}
    return 0;  
}
int CVICALLBACK ThreadFunction1 (void *functionData)
{
	while(startflag1)  
	{
		Sleep(0);//some work should to do  
 		printf("全局资源值1*********为%d %d \n", Getg_nNum(),Getg_nNum2());
 		printf("全局资源值2*********为%d\n", Getg_nNum1());
		Sleep(100);//some work should to do 
	}   
    return 0;  
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值