...
This noncompliant code example uses flag
as a synchronization primitive.
Code Block | ||||
---|---|---|---|---|
| ||||
bool flag = false; void test() { while (!flag) { sleep(1000); } } void wakeup(){ flag = true; } void debit(unsigned int amount){ test(); account_balance -= amount; } |
...
This noncompliant code example uses flag
as a synchronization primitive but qualifies flag as a volatile
type.
Code Block | ||||
---|---|---|---|---|
| ||||
volatile bool flag = false; void test() { while (!flag){ sleep(1000); } } void wakeup(){ flag = true; } void debit(unsigned int amount) { test(); account_balance -= amount; } |
...
This code uses a mutex to protect critical sections.
Code Block | ||||
---|---|---|---|---|
| ||||
#include <pthread.h> int account_balance; pthread_mutex_t flag = PTHREAD_MUTEX_INITIALIZER; void debit(unsigned int amount) { pthread_mutex_lock(&flag); account_balance -= amount; /* Inside critical section */ pthread_mutex_unlock(&flag); } |
...