Visual C++ .NET/Thread/Mutex

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

Sync By Mutex

 
#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();
}