2011-07-04 3 views
0

그래서 하나의 "기본"스레드가 있고 작업 스레드가 실행 중이거나 실행 중이 아닌지를 결정하는 pthreads가 있습니다. 하지만 수면에 대한 POSIX의 정의는 다음과 같습니다 : The sleep() function shall cause the calling thread to be suspended from execution...호출을 수행하는 PThread 이외의 다른 함수를 호출 할 때

분명히 플래그가 설정되어 있는지 확인하기 위해 각 작업자 스레드 검사를 수행하는 것과 같이 서투른 작업을 수행 할 수 있지만 좀 더 나은 것을 찾고 있습니다. 내 계획에 렌치를 던지고 있기 때문에 나는 분명히 뭔가를 놓치고 싶다. 어쨌든 Cilk을 해킹하는 경우

+0

다른 스레드 질문으로 많이 팝업,하지만 거의 없다 "중지"무엇을 * 정말 * 필요. 당신이 달성하고자하는 것을 더 자세하게 설명 할 수 있습니까? – cnicutar

+0

나는 (희망적으로) 누군가의 박사 학위 논문을 효율적으로 작성하고있다. 증명은 특정 시간에 자원을 소비하지 않는 특정 스레드에 달려 있습니다. 나에게 그건 자야. 당신이 더 좋은 방법을 안다면 나는 모든 귀입니다. –

답변

1

, 난 당신이 당신이 원하는 무엇이든 할 수있는 것 같아요

방법, 작업 개체를 dequeueing (또는 절도) 전에 세마포어 단위를 취득 pthread와 각을 가진, 그리고 일을 후 해제에 대한 그 일? 약간의 대기 시간이있을 수 있지만, 작업을 수행 할 수있는 스레드의 수는 세마포어에 신호를 보내는 단위의 수와 일치합니다. 제어 스레드에서 사용 가능한 스레드 수를 N으로 줄이려면 N 단위를 기다리십시오. 따라서 N 작업 스레드를 막습니다. 다시 시작하려면 N 단위로 신호하십시오.

이 시스템에서 작동합니까?

RGDS, 마틴

+0

나는 생각한다. 나는 그 목적을 위해 세마포어를 사용하는 것을 고려하지 않았지만 그것이 비교적 잘 원하는 것을해야하는 것처럼 보입니다. –

+0

나는 완벽을 기하기 위해 sema를 추가해야한다고 생각합니다. 작업 스레드와 동일한 수의 단위로 생성/초기화해야합니다. 어쩌면 작업 스레드 ctor에서 하나의 단위를 보내고 dtor에서 하나를 제거 할 수 있으므로 '자동으로'sema를 설정합니까? –

+0

Ahhh 불행히도 나는 이것으로 문제를 깨달았다. 이미 실행중인 스레드를 중지 할 수는 없습니다. 스레드가 더 많은 작업을하지 못하게 할 수는 있지만 중간 실행을 중단 할 수는 없습니다. –

관련 문제