...
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 <threads.h>
int account_balance;
mtx_t flag;
/* Initialize flag */
void debit(unsigned int amount) {
mtx_lock(&flag);
account_balance -= amount; /* Inside critical section */
mtx_unlock(&flag);
}
|
...