Forum » Programiranje » C/C++ Kako obvestim ostale threde, da je prispel nov podatek?
C/C++ Kako obvestim ostale threde, da je prispel nov podatek?
pro549 ::
Rad bi napisal en program kjer bi imel en "write" thread (W) in večkratne "read" threade (R). Write thread skrbi za to da fila nek krožni buffer (circular buffer) s podatkami, read thread pa naj bi prebral te podatke. Skratka me zanima, če je kak učinkovit način kjer bi "W" thread obvsetil "R" threade, da je del bufferja nafilan z novimi podatki. Rad bi se izognil funkcijam kot so sleep ali pa while zankam, da konstantno pverjajo ali je prispel kak nov podatek v buffer.
JanK ::
Ne vem v kaksnem okolju delas, sam za taksne zadeve uporabljam ACE. Ce zadevo namesto z bufferjem resis z vrsto, je resitev trivialna: vsak R thread enostavno poklice blocking dequeue. Ce ni nic v vrsti, vsi R threadi cakajo. cim nekaj prileti, se eden od threadov zbudi in obdela podatke. Z ACE bi slo to takole:
ACE_Message_Queue* queue; while( true ){ ACE_Message_Block* message; queue->dequeue(message); process_message(message); }
SasoS ::
Jasno da while in sleep nista pravi izbiri saj s tem zgrešiš bistvo threadanja. Za take zadeve se uporabi semafor ali kak drug threading primitive.
IceBoX ::
Bom kar tukaj vprašal, da ne bom odpiral nove teme. Sam sem začetnik v C in me zanima zakaj ne morem uporabljati cout in cin. Ali je to mogoče samo v C++?
Huh...
pro549 ::
Ne vem v kaksnem okolju delas, sam za taksne zadeve uporabljam ACE. Ce zadevo namesto z bufferjem resis z vrsto, je resitev trivialna: vsak R thread enostavno poklice blocking dequeue. Ce ni nic v vrsti, vsi R threadi cakajo. cim nekaj prileti, se eden od threadov zbudi in obdela podatke. Z ACE bi slo to takole:
ACE_Message_Queue* queue;
while( true ){
ACE_Message_Block* message;
queue->dequeue(message);
process_message(message);
}
Prvo bom poskusil napisat kodo v linuxu, kasneje pa še za embeded naprave (linux: busybox)
ERGY ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Worker arhitekturaOddelek: Programiranje | 2121 (1733) | pegasus |
» | Real-time databaseOddelek: Programska oprema | 1572 (1089) | kunigunda |
» | [JAVA] zaustavitev niti (threadov)Oddelek: Programiranje | 3172 (3172) | morbo |
» | Komunikacija med thread-iOddelek: Programiranje | 3725 (3531) | zlatko |
» | Message QueueOddelek: Programiranje | 1097 (887) | Vesoljc |