이 요청은 PThreads에 관한 것이고 조건 또는 신호를 사용하여 연속주기 작업자 스레드를 일시 중지/다시 시작합니다.pthread_kill 대 특정 지점에서 스레드 일시 중지/다시 시작을위한
기본적으로 https://stackoverflow.com/a/23945651/6421961
는, 사용자 johnnycrash가 sigwait()는 (외부 각성 대기) 일시 정지 상태로 스레드를 얻을 수 및 pthread_kill은을 (사용
A는 얼마 전, 나는이 들어왔다 thread_id, USR1) 스레드를 깨우도록 신호를 보냅니다. 그는 뮤텍스 + 조건 구조를 사용하는 것보다 빠르다고 주장하며 덜 복잡해 보입니다. 나는 실제로 신호가있을 때까지 잠을 자고 무한 사이클 (먹이 사 먹이 패러다임을 먹는 사람)에서 일을 마치고 잠을 자도록하는 소프트웨어를 개발 중이다. 나는 별도의 스레드가 작업자 스레드의 결론을 기다리는 데 사용하고 있습니다. 현재 구현에서, worker 쓰레드는 뮤텍스에 의해 보호받는리스트에 핸들을 추가하고, 기다리는 쓰레드에 pthread_kill을 신호하고 pthread_join으로 끝냅니다.
내 질문은 모든 관련이 있습니다
- 어떻게 유효 실제로 pthread_kill은() + sigwait() 대신 뮤텍스 + 조건을 사용할 수 있나요?
- 허용되는 해결책 인 경우 어떤 함정/경쟁 조건 을 알고 있어야합니까?
- 대신 pthread_sigqueue()을 사용하는 것이 더 좋습니까? pthread_kill()? sigwait()이 실행 중이 아니며 즉시 처리 할 수 있습니까? sigwait()이 호출되면 즉시 처리 할 수 있습니까? 내가 찾은 몇 가지 모순 정보에서 파생
- 마지막 질문은 : 다른 스레드는 모두 sigwait()이 USR1 독립적으로 신호를받을 수있을 기대, 또는 그 중 하나가 실제로 관계없이 신호를 잡을 수있을 것입니다 일시 정지 것인가 그 중 하나가 신호를 받았습니까?
세마포어 란 무엇입니까? 'sem_post()'/'sem_wait()'를 사용하는 것은 신호를 사용하는 것보다 훨씬 간단합니다. –
더 정확한 정보를 제공하기 위해 제 질문을 업데이트했습니다. 대체 구문과 비교할 때 세마포어가 얼마나 효율적입니까? – Joaommp