...
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);
}
|
...