두 개의 스레드가 있어야합니다. 모두 thread1 및 thread2 것을이 같은를 작성하는 가장 좋은 방법은 무엇멀티 스레딩하는 방법?
for (;;) {
Notify thread1 I am idle.
Wait for thread1 to be ready. // i.e. via 1st condition variable.
Notify thread1 I am exclusive.
Do some work while thread1 is blocked.
Notify thread1 I am busy. // i.e. via 2nd condition variable.
Do some work in parallel with thread1.
}
:
void waitForThread2() {
if (thread2 is not idle) {
return;
}
notifyThread2IamReady(); // i.e. via 1st condition variable
Wait for thread2 to finish exclusive access. // i.e. via 2nd condition variable.
}
두 번째 thread2는 다음 의사 루프에 영원히 : 첫 번째 thread1 때때로 다음과 같은 의사 함수를 호출 여러 개의 코어가있는 시스템에서 가능한 한 많이 사용합니다. 하나의 스레드에서 알림과 다른 스레드에서 감지 사이의 긴 지연을 피하고 싶습니다. pthread 조건 변수를 사용하여 시도했지만 thread2 사이의 지연을 'notify thread1 I 'm busy'라고하고 thear2IsExclusive()의 waitForThread2() 루프가 거의 1 초 지연 될 수 있습니다. 그런 다음 휘발성 sig_atomic_t 공유 변수를 사용하여 동일하게 제어하려고 시도했지만 잘못되었으므로 제대로 수행하지 않아야합니다.
당신은 이미 생각한 해결책을 구현할 것을 요구하기보다는 실제로 해결하려고하는 문제를 사람들에게 이야기하는 것이 더 낫습니다. –
당신의 의사 코드는별로 의미가 없습니다. 바쁜 다른 스레드에게 어떻게 알리나요? 그 이유는 무엇입니까?또한 여기 스레드에 집중하고 있습니다. 일반적으로 데이터를 동기화해야합니다. 어떤 데이터를 동기화하고 있으며, 동시에 작업을 병행하고 있습니까? – WhirlWind
당신이 무언가를하기 위해 초심을 돌리고 있다면 뭔가 잘못하고있는 것입니다. 게다가 할 수있는 일은 "다른 스레드에게 알린다"가 아니라 데이터 구조를 잠그는 것입니다. 후자는 비례하지 않습니다. –