2012-08-03 5 views
0

리눅스에서 phtreads 및 C를 사용하여 응용 프로그램을 작성하고 있습니다. main 함수는 많은 수의 스레드를 시작합니다 (최대 20 개). 그런 다음 어떤 기준 아래에서 모든 스레드를 한 번에 중지해야합니다. 하지만 어쩌면에서,리눅스, pthreads - 중지 조건 보내기

while (state) {....} 

그래서 나는이 각 스레드에 대해 하나 개의 상태를 충분히 될 순간에 생각하는 각 스레드 (false로 상태를 변경해야하는 각 스레드는 같은 몇 가지 조건 루프에서 실행됩니다 미래는 각 스레드를 개별적으로 멈춰야 할 것입니다.)

그래서 가장 좋은 방법은 무엇입니까? 일부 상태을 전역 변수로 사용할 수 있으며이를 위해 mutex를 사용할 수 있습니다. 매번 잠금을 걸고 읽어야하며, 값을 읽으려면 잠금을 해제해야합니다. 그리고 시간이 많이 걸리는 절차라고 생각합니다. 다른 아이디어를 구현하는 방법이 있습니까?

답변

1

# 남자의 pthread_cancel는 스레드에 취소 요청을 보낼 수 있습니다.

# 남자의 pthread_cleanup_push와는 취소 루틴을 설정할 수 있습니다.

+0

고맙습니다. 이러한 루틴은 상당히 복잡해 보이지만 실행중인 스레드를 취소 할 수있는 다른 방법은 없다고 생각합니다. 실제로, 실제로 안전합니까? pthread_setcelcel()을 지연시킨 pthread_cancel()을 호출하면 '누군가를 잠자고, 망치를 사용하는'것과 같지 않습니까? –

+0

예 .. 그렇지 않으면 pthread_join은 루틴을 실행할 때까지 스레드를 기다리는 데 도움이됩니다. –

+0

사실, 저는 이미 pthread_join()을 사용하고 있습니다. 그러나, 내가 말했듯이, 나는 각 스레드 내에서 무한 루프를 사용하고있다 (스레드는 직렬 포트와 돔 통신을한다). 그리고 그 자체로는 종료되지 않을 것이다. 그러나 pthread_cancell()은 맨 페이지에서 읽는 한 소위 * 취소 함수 *에 도달하는 한 스레드의 종료를 중단합니다. 내 스레드 무한 루프의 시작 부분에 read() 및 write() 사용하고 read() 및 write() 취소 함수 (사람 pthreads) 목록에 있습니다. 그래서 나는 pthread_cancell()을 할 때 내 스레드가 예상대로 취소 될 것이라는 희망을 가지고 있습니다. –