KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have the following code for interprocess communication through shared memory. One process writes to a log and the other reads from it. One way is to use semaphores, but here I'm using atomic flag ( log_flag ) of type atomic_t which resides inside the shared memory. The log ( log_data ) is also shared. Now the question is, would this work for x86 architecture or do I need semaphores or mutexes? What if I make log_flag non-atomic? Given x86 has a strict memory model and proactive cache coherence, and optimizations are not applied on pointers, I think it would still work? EDIT : Note that I have a multicore processor with 8 cores, so I don't have any problem with busy waits here! // Process 1 calls this function void write_log( void * data, size_t size ) { while( *log_flag ) ; memcpy( log_data, data, size ); *log_flag = 1; } // Process 2 calls this function void read_log( void * data, size_t size ) { while( !( *log_flag ) ) ; memcpy( data, log_data, size ); *log_flag = 0; }
Tags (comma-separated)
Save Edits
Cancel