我目前正在尝试将当前运行的线程限制为最大数量,例如核心数量。
这一切都做得很好,我每秒有 100 次完整的数据写入(打开、追加、关闭),但是当不使用信号量作为互斥体(数量 >1)时,订单或写入访问被取消。
使用 for 循环:
for(int i=0;i<10;i++)
mywrite.writeasnewthread("test.txt","asd"+mywrite.tostring(i));
writeasnewthread 包含在哪里
WaitForSingleObject(this->semaphor,INFINITE);
CreateThread(NULL,0,&threadwrite,(void*)param,0,NULL);
用 threadwrite 新线程,参数包含名称、数据和信号量。然后在最后的线程写入中我调用
ReleaseSemaphore(writeparam->This->semaphor,1,NULL);
但是,当我查看我在 threadwrite 中编写的文件时,会出现类似
2013-5-16 14:41:25 asd0
2013-5-16 14:41:25 asd3
2013-5-16 14:41:25 asd5
2013-5-16 14:41:25 asd7
2013-5-16 14:41:25 asd1
2013-5-16 14:41:25 asd8
2013-5-16 14:41:25 asd9
2013-5-16 14:41:25 asd6
2013-5-16 14:41:25 asd4
2013-5-16 14:41:25 asd2
我可能对信号量的工作原理有一些基本的误解,但我虽然线程会等待信号量再次有一个空闲插槽然后开始工作......
那么,有没有一种保留文件顺序的好方法?或者这会破坏信号量的概念吗?
问候,朱利安