排他ほぼ完成か
void read1() { int ret; while (ret = tryrdlock(&rw)) { if (ret==EDEADLK) { break; } else { //エラー処理 } sleep(100);//適当に待機 } //排他でのread作業 if (ret!=EDEADLK) { unlock(&rw); } } void read2() { int ret; if (!(ret = tryrdlock(&rw))) { if (ret!=EDEADLK) { if (ret = rdlock()) { //エラー処理 } } } //排他でのread作業 if (ret!=EDEADLK) { unlock(&rw); } }
となった。今回の条件なら簡略化したread2()で十分だ。これで手元では正しく動いている。でも、移植性についていまいち自信がなかったので2chでこんな感じで良いか質問してみた。
返答:Winにはrwlockがないよ
え?