これを行うのは安全ですか?
int fd;
void thread_main()
{
char buf[M];
ssize_t r = read(fd, buf, M);
assert(r == M);
...
}
int main()
{
fd = open("/dev/urandom", O_RDONLY);
for (int i = 0; i < N; i++)
start_thread(i);
for (int i = 0; i < N; i++)
join_thread(i);
}
つまり、メインスレッドから実行した後、異なるスレッドコンテキストから同期を解除しても安全open(2)
ですか?"/dev/urandom"
read(2)
どのような状況でアサートが発生しますか?2つのスレッドが同じデータを取得することはありますか?何がうまくいかない可能性がありますか?