Вообщем, есть примерно такой код:
// Блок данных из двух целых чисел:
int dx = 0;
int dy = 0;
int init_keys(WINDOW *window) {
keypad(window,TRUE); // enable keyboard mapping (process function keys in KEY_ symbols)
notimeout(window,TRUE);
wtimeout(window,20); // ms
cbreak(); // no wait for \n
noecho();
return 0;
}
...
// первая нить (поток)
void *funcKeyPress(void *p) {
int ch;
dx = 0;
dy = 0;
do {
ch = wgetch(windowGame);
if (ch == 0x1B) {
fQuit = TRUE;
break;
}
// adxw
if (ch == 'a') {dx = -1; dy = 0;}
if (ch == 'd') {dx = +1; dy = 0;}
if (ch == 'x') {dx = 0; dy = +1;}
if (ch == 'w') {dx = 0; dy = -1;}
// arrows
if (ch == KEY_LEFT) {dx = -1; dy = 0;}
if (ch == KEY_RIGHT) {dx = +1; dy = 0;}
if (ch == KEY_DOWN) {dx = 0; dy = +1;}
if (ch == KEY_UP) {dx = 0; dy = -1;}
// drawing
} while(TRUE);
return NULL;
}
void *funcDrawMap(void *p) {
do {
...
x_old = _p_x[iu];
y_old = _p_y[iu];
x_new = _p_x[iu]+dx; // вот здесь надо "защитить" пару переменных от записи первой нитью
y_new = _p_y[iu]+dy;
...
usleep(1000*200);
} while(TRUE);
...
return NULL;
}
Прочитал http://randu.org/tutorials/threads/ - там подходящего примера нет.
Я так понимаю, mutex'ы здесь не нужны (они - для больших задержек)?