Hey Leute,
ich bin zur Zeit auf der Suche nach der Semaphore Klasse, die ich unter Linux und unter Windows verwenden kann. Nach einiger Zeit im Netz hab ich das hier gefunden. Das erfüllt fast meine Anforderungen an die Klasse. Ich möchte beim Wait einen Parameter mitgeben, der angibt wie oft der Semaphore gelockt wird. Das ganze hat folgenden Hintergrund. Ich habe eine Liste die Daten verwaltet. Diese Liste wird von mehreren Threads gelesen, kann aber auch (ab und zu) komplett neu mit Daten befüllt werden. Nun wollte ich einen Semaphor nutzen, der 100 freie Plätze hat. Wenn ein Thread die Liste lesen will reserviert er einen Platz im Semaphor. So ist garantiert, das mehrere Threads gleichzeitig lesen können. Wenn die Liste neue Daten bekommt reserviert der Thread 100 Plätze und verhindert somit das noch Threads beim lesen sind, wenn die Liste aktualisiert wird. Wie stell ich das nun am dümmsten an?!
MfG & Thx Bergmann.
Semaphoren
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Semaphoren
Für die meisten Anwendungen reicht TCriticalSection.
Wenn Du eine Counting Semaphore brauchst (wie eine Sytem 5 sema) ist das natürlich nicht genug.
-Michael
Wenn Du eine Counting Semaphore brauchst (wie eine Sytem 5 sema) ist das natürlich nicht genug.
-Michael
-
- Beiträge: 98
- Registriert: Di 15. Nov 2011, 11:36
Re: Semaphoren
Ja genau darum geht es ja. Ne Critical Section ist dafür nicht geeignet.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Semaphoren
Soweit ich weiß, hat Windows keine counting Semaphore im OS. Aber Du kannst sicher mit Critical Section eine bauen. Ist zwar nicht so performant wie "Systerm 5", sollte aber OS-unabhängig möglich sein.Bergmann89 hat geschrieben:Ja genau darum geht es ja. Ne Critical Section ist dafür nicht geeignet.
-Michael
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Semaphoren
MSEgui hat
Martin
Code: Alles auswählen
function sys_semcreate(out sem: semty; count: integer): syserrorty;
function sys_semdestroy(var sem: semty): syserrorty;
function sys_sempost(var sem: semty): syserrorty;
function sys_semwait(var sem: semty; timeoutusec: integer): syserrorty;
//timeoutusec <= 0 -> no timeout
//sye_ok -> semaphore signaled
//sye_timeout -> timeout
//sye_semaphore -> error
function sys_semtrywait(var sem: semty): boolean;
function sys_semcount(var sem: semty): integer;