C++/CLI és Managed C++

Párhuzamosság

Párhuzamosság

A C++/CLI-ben nincsenek (ahogy a .NET 3.x idején egyetlen Microsoft-os CLR nyelvben sem) nyelvi szinten párhuzamos programok írását támogató nyelvi eszközök

A párhuzamosság a Windows szálak segítségével valósítható meg, e szolgáltatáshoz a System::Threading namespace nyújt .NET keretet.

A Thread osztály

Szálak indítására és felügyeletére a System::Threading::Thread osztályt használhatjuk. Az osztály konstruktora egy delegate-t vár, mely a szál belépési pontja lesz. Opcionálisan elláthatjuk egy Object típusú paraméterrel.
A Thread osztály lehetőségei:

MSDN példa:

using namespace System; using namespace System::Threading; public ref class ThreadExample { public: static void ThreadProc() { for ( int i = 0; i < 10; i++ ) { Console::Write( "ThreadProc: " ); Console::WriteLine( i ); Thread::Sleep( 0 ); } } }; int main() { Console::WriteLine( "Main thread: Start a second thread." ); Thread^ oThread = gcnew Thread( gcnew ThreadStart( &ThreadExample::ThreadProc ) ); oThread->Start(); for ( int i = 0; i < 4; i++ ) { Console::WriteLine( "Main thread: Do some work." ); Thread::Sleep( 0 ); } Console::WriteLine( "Main thread: Call Join(), to wait until ThreadProc ends." ); oThread->Join(); Console::WriteLine( "Main thread: ThreadProc.Join has returned. Press Enter to end program." ); Console::ReadLine(); return 0; }

Szinkronizáció: Monitor

A Monitor osztály statikus függvényeit használhatjuk szálak szinkronizációjára. Referencia típusú objektumokat zárolhatunk vele: