무언가의 상태를 폴링하는 루프가 생겼을 때 CPU를 사용하려는 다른 프로세스를 방해하지 않고 폴링을 수행하는 방법을 잘 모르겠습니다. 예를 들어 다음과 같이하십시오.리눅스에서 양심적 인 방식으로 폴링
while (state == BUSY) state = check_state();
은 자원 낭비처럼 보입니다. 나는이 작업을 수행하는 가장 좋은 방법이 될 것입니다 생각 :
while (state == BUSY) {
sched_yield();
state = check_state();
}
는 내가이 일을하는 동안에는 CPU의 100 %를 소비하는 경우에도, 그 상단이 수면으로 프로세스를 나열합니다 기대. 이 방법은 프로세스가 "멋지게"폴링하기를 바란다. 하지만 그건 무슨 일이 아니야. 내가 가지고있는 순간에
나는 꽤 그것이 받아 들일 수있는 것처럼 느껴진다. 이 일을하기위한 표준적인 관행이 있습니까?
인터럽트 나 블록을 셀렉트로 설정할 수 있는지 궁금해하는 사람들에게는 그럴 가능성이 없다고 생각합니다. 닫힌 소스 하드웨어 드라이버로 작업하고 있습니다. 드라이버가 PCI 카드로 무엇을하는지 확신 할 수는 없지만 상태 정보를 얻기 위해 하드웨어에 적극적으로 문의해야합니다. – Brian