Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   C (http://www.programmingforums.org/forum60.html)
-   -   sig_atomic_t to avoid mutex/critical sections (http://www.programmingforums.org/showthread.php?t=15778)

mynickmynick May 5th, 2008 9:29 AM

sig_atomic_t to avoid mutex/critical sections
 
On linux using pthreads, if I have a 2-bytes variable x shared by pthreads used only in the following ways:
(1)
:

x=value;
(2) or (separately)
:

if (x==value) {do something (not with x)}
(3) or (separately)
:

other variable (not shared) = x;

Is it correct to define it
sig_atomic_t x; (no matter if 4 or 2 bytes)
and AVOID to protect every instruction of kind (1) or (2) or (3) with pthread_mutex_lock()/trylock() before and pthread_mutex_unlock() after ?
Can I be sure there is no race condition/unpredicted event/problem?

In a few words: is it correct to speed up a software using sig_atomic_t data instead of mutexed data with the fundamental condition that data are as little as 2-4 bytes and are accessed only in the very simple way above?

Thanks

ranton May 5th, 2008 5:24 PM

Re: sig_atomic_t to avoid mutex/critical sections
 
Quote:

Originally Posted by mynickmynick (Post 144855)
On linux using pthreads, if I have a 2-bytes variable x shared by pthreads used only in the following ways:
(1)
:

x=value;
(2) or (separately)
:

if (x==value) {do something (not with x)}
(3) or (separately)
:

other variable (not shared) = x;

Is it correct to define it
sig_atomic_t x; (no matter if 4 or 2 bytes)
and AVOID to protect every instruction of kind (1) or (2) or (3) with pthread_mutex_lock()/trylock() before and pthread_mutex_unlock() after ?
Can I be sure there is no race condition/unpredicted event/problem?

In a few words: is it correct to speed up a software using sig_atomic_t data instead of mutexed data with the fundamental condition that data are as little as 2-4 bytes and are accessed only in the very simple way above?

Thanks

In the specific ways you indicate you want to access it, you should be safe, but there are other things you can't. Like safely do anything that may take more than one operation, such as increment the value(load, add,store).

This method is fine for doing something like quitting when a signal handler quits a flag which I have used it for in quite a few server processes I have written.


All times are GMT -5. The time now is 4:11 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC