− k;
− work;
− SumElement;
− stdout .
− () work;
− - SumElement ( , k ).
work ( main - . main, , !):
− , ;
− c . - ;
− main ;
− .
SumElement ( main, !):
− main ;
− k;
− .
4. main :
− , ;
− ;
− k;
− work;
− MultElement;
− stdout ;
− () work.
work ( main . main, , !):
− , ;
− [A,B] ( , - ). - . A,B main.
− main ;
− ;
− MultElement ( , ( [A, B]).
MultElement ( work, !):
− work ;
− ( [A, B]);
− .
5. main :
|
|
− , ;
− ;
− k;
− work;
− SumElement;
− stdout ;
− () work;
− SumElement ( , k ).
work ( main - . main, , !)'.
− , ;
− . - ;
− main ;
− .
SumElement ( main, !)'
− main ;
− ( ) k;
− .
6. main :
− , ;
− ;
− k;
− work;
− SumElement;
− stdout ;
− ;
− () work.
work ( main - . main, , !):
− , ;
− > ( , - ). - . main;
− main ;
− ;
− SumElement ( , .
SumElement ( work, !):
− work ;
− ;
− .
7. main :
− , ;
− ;
− k;
− work;
− SumElement;
|
|
− stdout ;
− () work;
− SumElement ( , k - ).
work main . main, , !.
− , ;
− ( , - ). - .
− main , ;
− SumElement main, !
− main ;
− k, .
8. main :
− , ;
− ;
− work;
− CountElement;
− stdout ;
− X;
− () work;
− work ( main - . main, , !)
− , ;
− = ( , -). - . X main;
− main ;
− ;
− CountElement ( , .
CountElement ( work, !)
− work ;
− X;
− .
9. main :
− , ;
− ;
− k;
− work;
− MultElement;
− stdout ;
− () work;
− MultElement ( , k ).
− work ( main - . main, , !)
− , ;
− < ( , - ). - . main;
|
|
− main ;
− ;
− MultElement ( main, !)
− main ;
− k;
− .
10. main :
− , ;
− ;
− work;
− SumElement;
− stdout .
− () work;
− work ( main - . main, , !)
− , ;
− , ( - ). , - , - 0. - ;
− main ;
− ;
− SumElement ( , ;
− SumElement ( work, !)
− work ;
− () ;
− .
11. main :
− , ;
− ;
− k;
− work;
− SumElement;
− stdout ;
− () work;
− SumElement ( , k );
− work ( main - . main, , !):
− , ;
− ( , - ) main ;
− ;
SumElement ( main, !):
− main ;
− () k;
− .
12. main :
|
|
− , ;
− ;
− work;
− MultElement;
− stdout ;
− () work;
work ( main - . main, , !):
− , ; . - , main ;
− ;
− MultElement ( , .
MultElement ( work, !):
− work ;
− ;
− .
13. main :
− , ;
− ;
− k;
− work;
− SumElement;
− stdout ;
− () work;
SumElement ( , k ).
work ( main - . main, , !):
− , ;
− , ( , - ). - .
− main ;
− ;
SumElement ( main, !):
− main ;
− () k;
− .
14. main :
− , ;
− ;
− work;
− SumElement;
− stdout ;
− () work;
work ( main . main, , !):
− , ;
− , ( - ). , : _). ;
− main ;
− ;
− SumElement ( , .
SumElement ( work, !):
− work ;
− () ;
− .
15. main :
− , ;
|
|
− ;
− work;
− Sum/CountElement;
− stdout ;
− () work;
work ( main - . main, , !):
− , ;
− , ( ).
− , : _). ;
− main ;
− ;
− Sum/CountElement ( , ;
− Sum/CountElement ( work, !):
− work ;
− ( : _) ;
− .
5
:
:
1. .
2. , .
3. ,
1. Windows
Windows , : (signaled) (nonsignaled). . , . Windows :
− (mutex);
− (event);
− (semaphore).
(waitable timer). , . . , . , .
. Windows , . , . , , , , . WaitForSingleObject WaitForMultipleObject.
WaitForSingleObject, :
DWORD WaitForSingleObject(
HANDLE hHandle, //
DWORD dwMilliseconds //
);
WaitForSingleObject , dwMilliseconds, hHandle . dwMilliseconds , . dwMilliseconds INFINITE, .
WaitForSingleObject :
WAIT_OBJECT_0
WAIT_ABANDONED
WAIT_TIMEOUT
WAIT_OBJECT_0 , . WAIT_ABANDONED , , , . . (abandoned mutex). WAIT_TIMEOUT , , . WaitForSingleObject WAIT_FAILED.
, WaitForSingleObject . , 2.1 Add.
1. WaitForSingleObject
#include <windows.h>
#include <iostream>
using namespace std;
void thread()
{
int i;
for (i = 0; i < 10; i++)
{
cout << i << ' '; cout << flush << '\a';
Sleep(500);
}
cout << endl;
}
int main()
{
HANDLE hThread;
DWORD dwThread;
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread, NULL, 0, &dwThread); if (hThread == NULL)
return GetLastError();
// thread
if(WaitForSingleObject(hThread, INFINITE)!= WAIT_OBJECT_0)
{
cout << "Wait for single object failed." << endl; cout << "Press any key to exit." << endl;
}
// thread CloseHandle(hThread);
return 0;
}
WaitForMultipleObject, :
DWORD WaitForMultipleObjects(
DWORD nCount, //
CONST HANDLE *lpHandles, //
BOOL bWaitAll, //
DWORD dwMilliseconds //
);
WaitForMultipleObjects . bWaitAll TRUE, , dwMilliseconds, , lpHandles, . bWaitAll FALSE, . dwMilliseconds , . dwMilliseconds INFINITE, . , WaitForMultipleObjects, MAXIMUM_WAIT_OBJECTS. , .
WaitForMultipleObjects :
WAIT_OBJECT_0 (WAIT_OBJECT_0 + nCount - 1); WAIT_ABANDONED_0 (WAIT_ABANDONED_0 + nCount - 1);
WAIT_TIMEOUT.
, WaitForMultipleObjects, bWaitAll. , TRUE. :
- , WAIT_OBJECT_0 (WAIT_OBJECT_0 + nCount - 1), , ;
- , WAIT_ABANDONED_0 (WAIT_ABANDONED_0 + nCount - 1) , , , ;