|
Сознаю себя полным неучем. Пропадаю- проблемы с ждущими болкировакми
Использую ждущие блокировки стандартно, но адрес передаю как параметр ф-ии.
При таком использовании, ждущие блокировки не работают. Подскажите пожалуйста где туплю/собака порылась. Спасибо.
char volatile go_flg, continue_flg;
struct run_cmd_t
{char volatile * flg;
char _cmd[128];
};
/*==============================================================================*/
int run_cmd(...., char volatile * flg)
{long rc;
char s[512];
{pthread_sleepon_lock();
while ( !(*flg) ) {sprintf(s,"%s on addr=%p", _sleep_on_wait_msg, flg);msg_to_log(s);pthread_sleepon_wait(flg);}
pthread_sleepon_unlock();....
return EOK;
}
int export_cmd (struct run_cmd_t *_cmd)
{struct plc_ascii_cmd_qry qry;
struct ea_errcode_rep rep;
int rc;
qry.type= PLC_ASCII_CMD;
strncpy(qry.cmd, _cmd->_cmd, 64);
rc=run_cmd((char *)&qry, sizeof(struct plc_ascii_cmd_qry), &rep, _cmd->flg);
return rc;
}void main(void)
{.....
case CONTINUE:
pthread_sleepon_lock();
continue_flg= 1;
pthread_sleepon_broadcast(&continue_flg);
pthread_sleepon_unlock();
.....
Переделал все на condvar. Результат такой же: pidin утверждает, что thread в сост CONDVAR висят на разных condvar с разными адресами(разные condvar), но каждый на 8 байт ниже печатаемого отладочным printf в программе.
Триггерации не происходит.
Спасибо.
E-mail: info@telesys.ru