Visual C++ .NET/Thread/Mutex — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 18:31, 26 мая 2010

Sync By Mutex

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; using namespace System::Threading; ref class MyThread {

   static Mutex ^m = gcnew Mutex(false, "SyncByMutex");

public:

   static void ThreadFunc();

}; void MyThread::ThreadFunc() {

   Random^ Rand = gcnew Random;
   Thread ^thr = Thread::CurrentThread;
   for (int i = 0; i < 4; i++)
   {
       m->WaitOne();
       Console::WriteLine("{0} Enter - {1}", thr->Name, i);
       Thread::Sleep(Rand->Next(20, 100)); // Simulate Work
       Console::WriteLine("{0} Exit  - {1}", thr->Name, i);
       m->ReleaseMutex();
       Thread::Sleep(Rand->Next(20, 100));
   }

} int main(int argc, char *argv[]) {

   MyThread ^myThr = gcnew MyThread();
   Thread ^thr1 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc));
   Thread ^thr2 = gcnew Thread(gcnew ThreadStart(&MyThread::ThreadFunc));
   thr1->Name =
       String::Format("Process {0} - Thread 1", gcnew String(argv[1]));
   thr2->Name =
       String::Format("Process {0} - Thread 2", gcnew String(argv[1]));
   thr1->Start();
   Thread::Sleep(50);
   thr2->Start();

}

 </source>