答案 0 :(得分:2)
跨进程工作的同步对象是互斥锁。
答案 1 :(得分:1)
Windows有一个锁定foreach文件,因此如果一个进程正在写入文件窗口,则不要让另一个写入。 Mutex就是你想要的,保护你用一个写入文件的代码。
答案 2 :(得分:1)
单一系统正如David所说,您可以使用互斥锁来完成此任务。在Windows中,这是通过使用命名的互斥锁和(如果需要)命名信号量来完成的。
函数CreateMutex可用于创建互斥锁(通过第一个进程)并通过其他进程打开它。在所有流程中提供相同的lpName
值。使用WaitForSingleObject获取互斥锁的所有权。并使用ReleaseMutex放弃所有权。
创建命名互斥锁can be found here的示例。
如果使用命名信号量,您可以通过给信号量初始计数为1来完成相同的事情。使用CreateSemaphore创建并打开它,WaitForSingleObject
以获得所有权(与mutex)和ReleaseSemaphore放弃拥有权。
多个系统上述方法假设这些进程都在同一系统上运行。如果进程在不同的系统上运行,那么您可能需要使用DVD提到的想法。您可以锁定文件的某些部分并将其用作同步方法。例如,按照惯例,您可以将某个偏移量锁定1个字节(甚至可以超过文件末尾)作为一种信号量。但是,使用此机制可能意味着您需要根据所使用的功能实现某种有效的等待。如果您使用CreateFile和LockFileEx,则可以让该功能通过在呼叫中不指定LOCKFILE_FAIL_IMMEDIATELY
来执行阻止等待。
答案 3 :(得分:0)
您的问题的答案是实现线程同步。
如果您使用的是C#,则可以在文件编写代码上添加一个锁{}语句。
对于其他语言,您必须使用Monitor或Mutex类进行同步。
答案 4 :(得分:0)
使用Stream.Synchronized()
见http://msdn.microsoft.com/en-us/library/system.io.stream.synchronized.aspx。此方法仅适用于C#,
答案 5 :(得分:0)