首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++多线程安全简单的有关问题

2012-03-24 
C++多线程安全简单的问题HANDLE hMutexint _tmain(int argc, _TCHAR* argv[]){HANDLE hThread1HANDLE hT

C++多线程安全简单的问题
HANDLE hMutex;
int _tmain(int argc, _TCHAR* argv[])
{
  HANDLE hThread1;
  HANDLE hThread2;

  //创建互斥对象
  hMutex=CreateMutex(NULL,TRUE,"Tickets");
  WaitForSingleObject(hMutex,INFINITE);
  ReleaseMutex(hMutex);
  ReleaseMutex(hMutex); -----------------------问题1:此处为什么连用了两个呢,删掉一个的话运行不出结果了
  //创建线程
  hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
  hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
   
  Sleep(4000);

  CloseHandle(hThread1);
  CloseHandle(hThread2);
  CloseHandle(hMutex); ------------------问题2:是这样关闭互斥对象吧?而且是在这个位置关闭还是放在前面?

  return 0;
}

[解决办法]
只能给你解答后面那个,close函数只会使该内核对象计数减一,如果内核对象(在这里就是互斥量内核对象)计数为0,那么系统会释放该对象。在该进程句柄表内的互斥量索引将会失效。
最后说一点:所有资源共享控制中 互斥量效率是最低的,因为它需要在用户模式和内核模式来回切换,大量消耗CPU周期。你可以用关键段或者读写锁。

热点排行