#include "stdafx.h" #include <Windows.h> #include <conio.h> #include <fstream> #include <iostream> using namespace std; int main ( int, char ** ) { HANDLE mutex = CreateMutex(NULL, FALSE, L"PRV"); for (int j=0; j < 100; ++j) { WaitForSingleObject(mutex, INFINITE); ofstream file("c:\\write.txt", ios::app); for (int i=0; i < 10; ++i) { file << 1; } ReleaseMutex(mutex); Sleep(100); } CloseHandle(mutex); }
我用file << 1
… file << 4
创build了4个字节,他们是作品,但我需要循环types的sorting。 或者,至less,没有写一个过程连续两次。
我不认为你可以用一个互斥量来实现你的目标,但是你可以很容易地使用两个互斥量来确保没有一个进程在一个序列中写两次。 你需要做的是总是有一个进程在等待队列中,一个进程处于写入状态。 要做到这一点,你创建两个互斥体,我们称之为queueMutex
和writeMutex
。 伪代码中的迭代逻辑应该如下所示:
acquire(queueMutex) // The process is next to write acquire(writeMutex) // The process can now write release(queueMutex) // Some other process can enter the queue // now we can write write_to_file() // Let's hold on here until some other process // enters the queue // we do it by trying to acquire the queueMutex // until the acquisition fails while try_acquire(queueMutex) release(queueMutex) sleep // try_acquire(queueMutex) finally failed // this means some other process has entered the queue // we can release the writeMutex and finish this iteration release(writeMutex)
我将把实施细节留给你。 当你实现这个算法的时候,确保你正确处理最后一个过程的最后一个迭代,否则它会挂起。 祝你好运!