提问人:Itay Bianco 提问时间:11/15/2023 更新时间:11/15/2023 访问量:9
C - 管道访问和互斥锁可能存在的重新排序问题
C - possible reordering issue with pipe access and mutex
问:
在通过调用初始化后write_fd我有 2 个线程在运行:pipe()
static bool finished = false;
线程 1
pthread_mutex_lock(&lock);
if (!finished) {
write(write_fd, buf, buf_len);
}
pthread_mutex_unlock(&lock);
线程 2
pthread_mutex_lock(&lock);
finished = true;
pthread_mutex_unlock(&lock);
close(write_fd);
问题是编译器/CPU 是否有可能以在互斥锁之前移动的方式对线程 2 中的指令重新排序?close(write_fd)
如果是这样,这可能会产生问题,因为线程 1 可能会写入关闭的 fd,或者更糟糕的是,可能会为其他一些代码分配相同的 fd,而线程 1 将写入错误的位置。
这是我的代码中发生的情况的简化形式。可以做些什么来确保在线程 2 中解锁后发生,而无需实际将代码移动到互斥锁保护区域?通过另一个函数调用会吗?close
close
答: 暂无答案
评论