현재 현재 실행중인 스레드를 최대 크기로 제한하려고합니다. 핵심 금액.C++ 세마포어가 호출 순서를 고려하지 않습니다.
이것은 모두 잘되고 있으며, 초당 100 건의 전체 데이터 쓰기 (열기, 추가, 닫기)와 비슷하지만 뮤텍스 (양> 1)를 사용하지 않는 세마포어는 순서 또는 쓰기 액세스가 찌르다. 사용
A의 루프 : writeasnewthread threadwrite는 새로운 스레드 PARAM 함유 이름 데이터 및 세마포어
WaitForSingleObject(this->semaphor,INFINITE);
CreateThread(NULL,0,&threadwrite,(void*)param,0,NULL);
포함
for(int i=0;i<10;i++)
mywrite.writeasnewthread("test.txt","asd"+mywrite.tostring(i));
. 내가 threadwrite에 쓴 파일을 볼 때 가 그런 말 threadwrite에 나는, 그러나
ReleaseSemaphore(writeparam->This->semaphor,1,NULL);
전화,
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
등에 뭔가를 간다 아마 방법 세마포어 작품 몇 가지 기본적인 오해가 ,하지만 그 스레드는 세마포어가 다시 빈 슬롯을 가지기를 기다리고있을 것이지만 작업을 시작합니다 ...
그래서 파일의 순서를 유지하는 좋은 방법이 있습니까? 또는 이것이 세마포어의 개념을 파괴합니까?
감사합니다, 줄리안
제쳐두고 (로버트의 대답은 정확합니다), 무엇을 사용합니까? 쓰기가 엄격한 순서로 실행되면 아무런 동시성을 얻지 못할 것입니다! – Useless
@Useless 글쎄, 스레드를 사용하는 프로세서를 더 잘 활용할 계획 이었지만, 지금은 뮤텍스로 충분할 것이라고 생각합니다. 따라서 IO를 처리하는 추가 스레드, 다른 것으로 바쁜 주 스레드 및 뮤텍스가 있는지 확인하기위한 스레드가 있다고 생각합니다. 많은 데이터를 저장할 때 경쟁 조건이 없어도 충분합니다. – Julian
솔직히 말해서,이 글은 너무 작기 때문에 다른 스레드에서 동기화 작업을 수행하는 것보다 비용이 적게 듭니다. – Useless