| Autor |
Nachricht |
ChrisCross+
Unregistrierter
|
ChrisCross+ Unregistrierter
14:08:51 24.03.2012 Titel: |
API Thread Synchronisation, irgendwas mach ich falsch. |
Zitieren |
Guten Tag,
ich versuche mich zum ersten mal an Threads...das Thema habe ich immer
gemieden aber irgendwie reizt es mich trotzdem.
Ich teste eigentlich ein einfaches Beispiel und hatte mir als Ergebnis
folgendes in der Konsole erhofft:
| Zitat: |
Starting both Threads...
0
1
2
3
4
5
Closing both Threads...
|
Doch irgendwie habe ich einen Denk(Syntax)fehler und bekomme immer eine
unsaubere Zahlenkette in der Konsole raus
Ich wäre für jede Hilfe dankbar <3
(Hatte zuerst mit Mutex dann mit Critical Section getestet, bei beiden das gleiche Problem)
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <Windows.h>
#include <WindowsX.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int fu = 0;
//HANDLE mutex = CreateMutex(NULL, false, NULL);
CRITICAL_SECTION crit;
void thread_1()
{
//WaitForSingleObject(mutex, INFINITE);
EnterCriticalSection(&crit);
cout << fu << endl;
LeaveCriticalSection(&crit);
//ReleaseMutex(mutex);
}
void thread_2()
{
//WaitForSingleObject(mutex, INFINITE);
EnterCriticalSection(&crit);
fu++;
LeaveCriticalSection(&crit);
//ReleaseMutex(mutex);
}
int main()
{
InitializeCriticalSection(&crit);
cout << "Starting both Threads..." << endl;
LPVOID func_id_1 = "1";
LPVOID func_id_2 = "2";
DWORD thread_id_1 = 1;
DWORD thread_id_2 = 2;
for(int i = 0; i < 5; i++)
{
HANDLE h_thread[1];
h_thread[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_1, &func_id_1, 0, &thread_id_1);
h_thread[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_2, &func_id_2, 0, &thread_id_2);
//WaitForSingleObject(h_thread[0], INFINITE);
//WaitForSingleObject(h_thread[1], INFINITE);
WaitForMultipleObjects(2, h_thread, true, INFINITE);
CloseHandle(h_thread[0]);
CloseHandle(h_thread[1]);
}
cout << "Closed both Threads..." << endl;
DeleteCriticalSection(&crit);
//CloseHandle(mutex);
Sleep(5000);
return 0;
} | | |
|
|
|
 |
dot
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.05.2004
Beiträge: 5639
|
dot Mitglied
14:27:47 24.03.2012 Titel: |
|
Zitieren |
Mit der Critical Section stellst du nur sicher, dass die Threads nicht gleichzeitig auf die Konsole schreiben. Die Reihenfolge in der sie das tun ist aber völlig zufällig. |
_________________ one point of view will never reveal the entire scene.
|
|
 |
Hi
Unregistrierter
|
Hi Unregistrierter
14:42:49 24.03.2012 Titel: |
Re: API Thread Synchronisation, irgendwas mach ich falsch. |
Zitieren |
Auf den ersten Blick...
| ChrisCross+ schrieb: | ...und hatte mir als Ergebnis
folgendes in der Konsole erhofft: |
Wie das? Du kannst nicht steuern, welcher Thread zuerst abgearbeitet wird. Es kann also sein, dass thread2 zuerst ausgeführt wird und somit auch zuerst die CS bekommt.
Und ein Fehler: HANDLE h_thread[2]; |
|
|
|
 |
ChrisCross+
Unregistrierter
|
ChrisCross+ Unregistrierter
02:00:04 25.03.2012 Titel: |
re |
Zitieren |
Gibt es also keine Moeglichkeit die Reihenfolge zu kontrollieren mit der die Threads auf die Variable zugreifen?
Vielen Dank fuer eure Antworten |
|
|
|
 |
theta
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.09.2008
Beiträge: 4095
|
theta Mitglied
10:18:57 25.03.2012 Titel: |
|
Zitieren |
Doch, z.B. mit Events (CreateEvent) |
|
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 14218
|
Martin Richter Moderator
10:39:31 25.03.2012 Titel: |
Re: re |
Zitieren |
| ChrisCross+ schrieb: | Gibt es also keine Moeglichkeit die Reihenfolge zu kontrollieren mit der die Threads auf die Variable zugreifen?
Vielen Dank fuer eure Antworten  |
Nein!
Wenn Du das willst müsstest Du selbst eine Queue aufbauen und dann in diesen die entsprechenden Events signalisieren... |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
ChrisCross+
Unregistrierter
|
ChrisCross+ Unregistrierter
12:05:20 25.03.2012 Titel: |
API Thread Synchronisation, irgendwas mach ich falsch. |
Zitieren |
Ah das mit den Events ist ziemlich gut
Vielen Dank an Alle <3 |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|