728x90
반응형
thread 에 인자값을 넘길 수 있다.
create시 변수의 주소를 넘기는 방식을 이용한다.
구조체 변수를 이용하면 더 많은 값을 넘길 수 있다.
멀티스레드 인자값 넘길 때 문제점
예를 들어 다음과 같은 코드를 실행하면 어떤 값이 나올 것 같은지 예상해보자.
0~3로 변하는 i 값이 printf 되고, 스레드는 순차적으로 진행되지 않다는 특징을 알고있다면
0 1 2 3
3 2 1 0
3 1 0 2
뭐 이런식이겠지 싶을것이다.
그런데 실제로는 이렇게 나오지 않는다.듣도 보도 못한 4가 나온다.. 잘 보면 숫자가 중복돼서 나올 때도 있다.
스레드 동작이 이상한 이유
왜그럴까..? 힌트는 main 함수도 스레드라는 것이다.
원인은 스레드를 생성하는 것보다 main 함수가 반복문을 도는 것이 더 빠르기 때문이다.
main 함수가 너무 빠르게 반복문을 돌다보니 첫번째 스레드에서 printf 할 시 main 함수는 이미 i가 2로 설정되어있을 수 있는 것이다. 그렇기 때문에 4가 나올 수 있는 것이다.
해결방법 : 배열만들기
그럴때는 배열에 i값을 저장해서 배열을 인자로 넘겨주면 해결된다.
예상대로 나온 결과
728x90
반응형
'임베디드' 카테고리의 다른 글
[라즈베리파이] 도어락 만들기 (0) | 2022.04.23 |
---|---|
[Thread] 멀티스레드와 임계영역의 mutex init/lock/unlock/destory (0) | 2022.04.22 |
[Thread] POSIX 멀티스레드 예시 작성하기 (0) | 2022.04.19 |
[Thread] 멀티프로세스와 멀티스레드 (0) | 2022.04.18 |
[메모리] 메모리구조 : text data bss stack heap (0) | 2022.04.17 |