0

对于我的项目,我正在从多个线程读取和写入文件,因此我需要实现文件锁定。我已经尝试过fcntl(),但是似乎该功能仅适用于进程之间的锁定,而不是线程之间的锁定。因此,我正在寻找另一种解决方案。我想出的解决方案(这可能不是最好的)是在我的文件中的每条记录中都有一个字节来指示记录是否被锁定,然后我可以使用繁忙的循环来读取和检查字节。

所以,我有两个问题。首先,实现文件区域锁定最有效的方法是什么?其次,如果我使用繁忙的循环方法,我如何通过大中央调度来优化它?我在想我可以让所有繁忙的循环都发生在发送到的块中dispatch_sync()。但我不知道这是否会有效地工作。

谢谢。

4

1 回答 1

1

调度信号量怎么样?您可以使用 Dispatch Semaphore 以独占方式访问资源。例如,为您的文件区域创建调度信号量。

for (int i = 0; i < regions; ++i)
    sema_[i] = dispatch_semaphore_create(1);

然后,通过等待和信号访问资源。

dispatch_semaphore_wait(sema_[region], DISPATCH_TIME_FOREVER);
/* access the region */
dispatch_semaphore_signal(sema_[region]);
于 2011-07-19T08:02:44.103 回答