I have two threads running in the same server. On thread handles incoming ipc messages from the clients in different address spaces and the other thread does the work. The thread handling the incoming ipc needs to pass an integer value to the worker thread. Could I synchronize them using
int l4util_cmpxchg32 https://os.inf.tu-dresden.de/L4Re/doc/group__l4util__atomic.html#gacb4a5e47fea67cc4c61b488fc374df62 (volatile l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a *dest, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a cmp_val, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a new_val)
the worker thread could then check the value of dest to get the integer. Would the worker thread need to use an atomic read function when it reads the value of dest and if so which function would the worker thread use for the atomic read?
thanks,
Am 10.10.2014 um 18:00 schrieb teclis High Elf:
I have two threads running in the same server. On thread handles incoming ipc messages from the clients in different address spaces and the other thread does the work. The thread handling the incoming ipc needs to pass an integer value to the worker thread. Could I synchronize them using
int l4util_cmpxchg32 https://os.inf.tu-dresden.de/L4Re/doc/group__l4util__atomic.html#gacb4a5e47fea67cc4c61b488fc374df62 (volatile l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a *dest, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a cmp_val, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html#gac1d09f3e382e711b776931f10e6e1e5a new_val)
the worker thread could then check the value of dest to get the integer. Would the worker thread need to use an atomic read function when it reads the value of dest and if so which function would the worker thread use for the atomic read?
In your scenario, I would think of it like this:
int data = -1; // global variable, set to invalid value
server_thread() { int val = receive_message(); data = some_processing(val); }
worker_thread() { while (data == -1) // spin until data is valid ; /* Use data here */ }
I don't see the need for an atomic cmpxchg() in your specific case. Actually I would however suggest you use a pthread_mutex or a pthread_cond_var to synchronize your threads (or even IPC between the two...).
Bjoern
So L4Re is POSIX compliant?
On Fri, Oct 10, 2014 at 12:16 PM, Björn Döbel doebel@os.inf.tu-dresden.de wrote:
Am 10.10.2014 um 18:00 schrieb teclis High Elf:
I have two threads running in the same server. On thread handles incoming ipc messages from the clients in different address spaces and the other thread does the work. The thread handling the incoming ipc needs to pass an integer value to the worker thread. Could I synchronize them using
int l4util_cmpxchg32 https://os.inf.tu-dresden.de/L4Re/doc/group__l4util__atomic.html# gacb4a5e47fea67cc4c61b488fc374df62 (volatile l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a *dest, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a cmp_val, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a new_val)
the worker thread could then check the value of dest to get the integer. Would the worker thread need to use an atomic read function when it reads the value of dest and if so which function would the worker thread use for the atomic read?
In your scenario, I would think of it like this:
int data = -1; // global variable, set to invalid value
server_thread() { int val = receive_message(); data = some_processing(val); }
worker_thread() { while (data == -1) // spin until data is valid ; /* Use data here */ }
I don't see the need for an atomic cmpxchg() in your specific case. Actually I would however suggest you use a pthread_mutex or a pthread_cond_var to synchronize your threads (or even IPC between the two...).
Bjoern
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
At least, it supports pthread library.
On Fri, Oct 10, 2014 at 1:48 PM, teclis High Elf teclis.high.elf@gmail.com wrote:
So L4Re is POSIX compliant?
On Fri, Oct 10, 2014 at 12:16 PM, Björn Döbel <doebel@os.inf.tu-dresden.de
wrote:
Am 10.10.2014 um 18:00 schrieb teclis High Elf:
I have two threads running in the same server. On thread handles incoming ipc messages from the clients in different address spaces and the other thread does the work. The thread handling the incoming ipc needs to pass an integer value to the worker thread. Could I synchronize them using
int l4util_cmpxchg32 https://os.inf.tu-dresden.de/L4Re/doc/group__l4util__atomic.html# gacb4a5e47fea67cc4c61b488fc374df62 (volatile l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a *dest, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a cmp_val, l4_uint32_t https://os.inf.tu-dresden.de/L4Re/doc/group__l4__basic__types.html# gac1d09f3e382e711b776931f10e6e1e5a new_val)
the worker thread could then check the value of dest to get the integer. Would the worker thread need to use an atomic read function when it reads the value of dest and if so which function would the worker thread use for the atomic read?
In your scenario, I would think of it like this:
int data = -1; // global variable, set to invalid value
server_thread() { int val = receive_message(); data = some_processing(val); }
worker_thread() { while (data == -1) // spin until data is valid ; /* Use data here */ }
I don't see the need for an atomic cmpxchg() in your specific case. Actually I would however suggest you use a pthread_mutex or a pthread_cond_var to synchronize your threads (or even IPC between the two...).
Bjoern
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
l4-hackers@os.inf.tu-dresden.de