Bonjour,
J'aurais voulu avoir votre opinion sur "comment implementer un semaphore en utilisant un mutex et une condition" avec pthread ?
Je sais que pthread possede deja des semaphores, mais j'aimerais en re-implementer un (pour le sujet [MT] Benchmark de produits matriciels sur processeurs multi-cores )
en gros, pthread est mal foutu pour mac et n'implemente pas ce qu'il faut pour faire des semaphores (en fait que ceux inter-processus et sont forcement nomm�s)
donc l'id�e serait de reimplementer un count semaphore...
�tes-vous d'accord ? (pthread est utilis� sous la couche d'abstraction)
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 class semaphore { private: int count; mutex mut; condition cond; semaphore(const self &); const self &operator=(const self &); public: inline semaphore( ) { count = 1; } inline semaphore(int n) { count = n; } inline ~semaphore() {} inline void release() { mut.acquire(); count = count + 1; cond.signal(); mut.release(); } inline void release(int n) { for (int i=0; i<n; ++i) release(); } inline void acquire() { mut.acquire(); assert(count >= 0); while(count == 0) cond.wait(mut); count = count - 1; mut.release(); } inline void acquire(int n) { for (int i=0; i<n; ++i) acquire(); } inline bool try_acquire() { mutex::scoped_lock lock(mut); return count > 0; } inline int try_acquire(int n) { mutex::scoped_lock lock(mut); return count > n ? n : count; } };
je ne pense pas que le code soit bon pour
http://www.developpez.net/forums/sho...&postcount=177
Code : S�lectionner tout - Visualiser dans une fen�tre � part inline void acquire(int n) { for (int i=0; i<n; ++i) acquire(); }
imaginons 2 threads qui se dispute 10 resources (semaphore) si chacun des threads en veut 8, he bien il y a blocage pur et simple parce que ils se seront allou�s chacun 5 resources par exemple ....
il vaudrait mieux faire acquerir n resources ou rien...
Qu'en pensez-vous ?
Merci d'avance pour vos conseils,
a+
Partager