2010-07-03 1 views
1

나는 현재 상태를 ENUM으로 저장하는 C++/Qt QThread 작업자 스레드가있다 (예 : Working, Finished와 같은 값). 작업자 스레드 만 ENUM을 설정합니다.C++/Qt enum - 스레드간에 값을 공유하려면 잠금을 사용해야합니까?

다른 스레드 (GUI 스레드)에서 작업자 스레드의 상태를 읽고 작업 중인지 여부를 화면에 표시 할 수 있어야합니다.

한 스레드 (작업자)에서 ENUM을 읽고 쓰는 것이 안전합니까? 다른 스레드에서 읽으십니까? 그렇지 않으면 QMutex와 같은 잠금 기능을 읽고 쓰는 곳에서 사용해야합니까?

+0

enum은 정수형이므로 스레드로부터의 읽기/쓰기에 대한 많은 이전 질문이 적용됩니다. 예 : http://stackoverflow.com/questions/54188/are-creads-writes-of-an - 원자 - 하단 라인, 당신은 뮤텍스 또는 유사합니다. –

답변

1

Neil이 말한대로 : 네, 잠금이 필요합니다. 유스 케이스의 경우 QReadWriteLock이 QMutex보다 더 적합해야합니다.

1

더 많은 Qt 특정 방법은 상태가 바뀔 때마다 작업자 스레드가 해당 상태로 신호를 내보내는 것입니다. 그런 다음 GUI는 신호에 연결하고 작업자 스레드의 상태에 필요한 모든 것을 업데이트합니다. 이 작업을 수행하고 값으로 상태를 전달하면 상태를 뮤텍스 보호 할 필요가 없습니다 (신호를 내보낼 때 값이 복사되고 복사본이 변경되지 않으므로 UI ​​스레드에서 복사본을 읽습니다.). 그러나 다른 시간에 상태에 대한 스레드를 여전히 쿼리해야하는 경우에는 여전히 잠금이 필요합니다.

관련 문제