如果一个变量不想使多个线程共享访问, 可以使用TLS, 线程本地存储。它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK。
源代码:
#include "stdafx.h"
#include <assert.h>
#include <stdio.h>
#include <windows.h>__declspec(thread) int g_nData = 0; //这就是两个线程都要访问的变量
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
g_nData = 5;
//辅线程睡眠100ms, 保证主线程的g_nData = 10; 语句执行成功
Sleep(100);
char szMsg[40] = {0};
sprintf(szMsg, "Auxi thread, g_nData: %d", g_nData);
MessageBox(NULL, szMsg, "AuxiThread", MB_ICONINFORMATION);
return 0;
}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
// TODO: Place code here.
DWORD dwId;
//创建线程, 并立即启动它
HANDLE hThread = CreateThread(NULL, 1024, ThreadProc, NULL, 0, &dwId);
assert(hThread);
//主线程睡50ms, 保证辅线程的g_nData = 5; 语句执行成功
Sleep(50);
g_nData = 10;
char szMsg[40] = {0};
sprintf(szMsg, "Result: %d", g_nData);
MessageBox(NULL, szMsg, "MainThread", MB_ICONINFORMATION);
return 0;
}
如果不使用TLS, 那么结果都是10; 如果使用TLS, 那么主, 助线程的结果将各不影响。
已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/147.html 欢迎订阅Eddy Blog。