0

我有两个线程,一个写入文件,一个从同一个文件中读取。我在 writer 线程中使用 CreateFile & WriteFile、FlushFileBuffers,而 reader 线程使用 FtpPutFile。

如何在这里实现一个简单的 windows32 Mutex?(我已经很多年没用过了)

或者,这是否可以通过将适当的标志发送到 CreateFile 来实现?(我试过但没有运气)

4

2 回答 2

1

你不需要互斥锁。您可以在多个线程中安全地读取和写入同一个文件。您可以多次打开文件,以便每个线程都有自己的文件句柄和自己的文件指针,或者您可以使用重叠 I/O 在特定位置读取或写入。

您无需为重叠 I/O 打开文件。你可以这样做:

LARGE_INTEGER off = offset;
OVERLAPPED ov = { 0 };
ov.Offset = off.LowPart;
ov.OffsetHigh = off.HighPart;
ReadFile(handle, buffer, count, &bytesRead, &ov);

这允许您以原子方式读取文件 ( ) 中的特定位置offset,因此您不必调用SetFilePointerEx并担心另一个线程会弄乱指针。同样的事情也适用于写作。

于 2012-08-09T13:08:25.563 回答
0

如何实现一个简单的互斥锁:使用CreateMutex函数或CreateMutexEx
创建一个互斥锁。完成后,您需要调用CloseHandle。一旦你有了互斥体,你就可以调用WaitForSingleObject来同步你的调用(完成后不要忘记调用ReleaseMutex。最后,这是一个使用互斥体对象的例子

于 2012-08-09T13:04:41.793 回答