Visual C++ .NET/Thread/Mutex
Версия от 18:31, 26 мая 2010; (обсуждение)
Sync By Mutex
<source lang="csharp">
- 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>