저는 최근에 멀티 프로세싱을 배우고 있으며 리소스가있는 작업을 마친 시나리오에 부딪혔습니다. 다시 필요로하기 전에 다른 사람이 필요하기는하지만이를 릴리스하고 복용하는 것 외에는 할 일이 없습니다. 다시 :뮤텍스/세마포어를 잠금 해제 한 다음 즉시 잠급니다. 나쁜 연습이나 그것을 할 수있는 방법이 있습니까?
(의사 코드)
while (true) {
mutex_lock(resource);
/* modify resource */
mutex_unlock(resource);
/* wait for someone else to modify resource */
}
문제는이 과정이 차단 된 다른 프로세스가있는 경우에도, 다시 잠 즉시 다음 리소스 잠금을 해제하는 것입니다. 단지 CPU를 포기하지 않았기 때문에 이것이라고 가정 할 수 있습니다.
나는 나쁜 습관을하고 있습니까? 이 문제와 관련된 코드를 특별히 설계하는 것 외에는 주위에 방법이 보이지 않습니다. 거기에 방법이 있나요 yield
C/C에서 프로세서 + + 그래서 내가 다시 잠금을하지 않는 보장 할 수 있습니까?
동일한 잠금을 기다리는 스레드가 모두있는 경우 하나의 스레드가 잠금 해제되면 잠금을 대기중인 다른 모든 스레드가 잠금 해제 된 스레드보다 먼저 나타납니다. 따라서이 동작은 정상입니다. server with – bruceg
일반적으로'sleep (0)'은이를 수행합니다 - 운영체제에 이익을 주며, 운영체제가 더 좋은 것을 찾으면 나머지 시간대와 원칙적으로 포기합니다. –
'pthread' API를 사용하고 있습니까? – user3386109