个人网站的名称,网络营销理论主要包括,上海建设房屋网站,做网站用的大图CreateThread函数与_beginthreadex 函数的联合使用#xff1a; 为了多线程同步的需要#xff0c;使每个线程必须具有唯一的状态#xff0c;CreateThread还不能灵活使用#xff0c;需要使用C/C运行期库#xff1b;CreateThread函数参数与_beginthreadex函数对应的#xff…CreateThread函数与_beginthreadex 函数的联合使用 为了多线程同步的需要使每个线程必须具有唯一的状态CreateThread还不能灵活使用需要使用C/C运行期库CreateThread函数参数与_beginthreadex函数对应的只是类型不同需要强制转换。每个线程都有自己的内核对象包含了该线程的属性信息
#includewindows.h #includeiostream #includeprocess.h using namespace std;
UINT __stdcall ThreadProcess(LPVOID lpParam); int b true; int count1 0; int count2 0;
int main() { UINT Ui; HANDLE hThread[10]; for (int i 0; i 10; i) { hThread[i] (HANDLE)::_beginthreadex(NULL, 0, ThreadProcess, NULL, 0, Ui); } Sleep(6000); b false; ::WaitForMultipleObjects(10, hThread, TRUE, INFINITE); for (int i 0; i 10; i) { ::CloseHandle(hThread[i]); } cout Count1 count1 endl; cout Count2 count2 endl; return 0; }
UINT __stdcall ThreadProcess(LPVOID lpParam) { while (b) { count1; count2; } return 0; }
Count1114786278 Count251099437 请按任意键继续. . .
同步上述count1与count2不同临界区对象能很好保护共享数据但不能由于进程间锁定资源它不是内核对象。 使用临界区对象是定义在数据段中的一个CRITICAL_SECTION结构确保在同一时间只有一个线程访问该数据段中的数据。把临界区数据定义在保护数据段中void InitializeCriticalSection(LPCRITICAL_SECTION lp_cs);指向数据段中的CRITICAL_SECTION结构申请访问数据段数据,void EnterCriticalSection(LPCRITICAL_SECTION lp_cs);数据段区使用完毕返还void LeaveCriticalSection(LPCRITICAL_SECTION lp_cs);程序不再使用临界区数据时删除void DeleteCriticalSection(LPCRITICAL_SECTION lp_cs);#includewindows.h #includeiostream #includeprocess.h using namespace std;
UINT __stdcall ThreadProcess(LPVOID lpParam); int b true; int count1 0; int count2 0;CRITICAL_SECTION cs; int main() { UINT Ui; HANDLE hThread[10]; ::InitializeCriticalSection(cs); for (int i 0; i 10; i) { hThread[i] (HANDLE)::_beginthreadex(NULL, 0, ThreadProcess, NULL, 0, Ui); } Sleep(6000); b false; ::WaitForMultipleObjects(10, hThread, TRUE, INFINITE); for (int i 0; i 10; i) { ::CloseHandle(hThread[i]); } ::DeleteCriticalSection(cs); cout Count1 count1 endl; cout Count2 count2 endl; return 0; }
UINT __stdcall ThreadProcess(LPVOID lpParam) { while (b) { ::EnterCriticalSection(cs); count1; count2; ::LeaveCriticalSection(cs); } return 0; }
Count119105856 Count219105856 请按任意键继续. . .