작성
·
462
0
WSL2 환경에서 자바를 설치하고
컨슈머 프로듀서 예제를 설명하신 AtomicBoolean으로 flag값을 그리고 turn을 static 영역에 할당하고
컨슈머 프로듀서의 잡을 각기 다른 두 개의 쓰레드로 실행시켰습니다
turn이나 flag값이 클럭단위로 문맥교환하는 경우를 가정해서 뜯어보며 경우의 수를 따져봤지만 딱히 문제되는 경우는 없어보였습니다 while의 조건문을 고려해도 딱히 문제는 없어보였구요 그런데 count값은 이상하게도 0이 항시적으로 나오지 않았고 예상된 값을 벗어났습니다
리눅스라 에러가 생기는건가 싶지만 JVM에서 가동되는 환경이라 딱히 다를것은 없다고 생각했고 실제로도 윈도우즈 환경에서도 똑같은 동시성문제가 발생했습니다
도대체 무엇이 문제일까요
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 피터슨 알고리즘과 compare_and_swap 명령어에 대한 질문이시군요.
피터슨 알고리즘은 상호 배제를 위한 동기화 알고리즘 중 하나로, 두 개의 프로세스 혹은 스레드가 공유 자원에 접근할 때 사용됩니다. 피터슨 알고리즘을 사용하면 두 개의 스레드가 동시에 공유 자원에 접근하는 것을 막는 것이 가능합니다.
compare_and_swap 명령어는 다른 이름으로 CAS(Compare-and-swap)라고도 불리며, 원자적인 조작을 수행하는 컴퓨터 하드웨어 명령어입니다. 이 명령어를 사용하면 공유 자원에 대한 동기화 문제를 해결하는데 도움이 됩니다.
질문 내용을 보면 WSL2 환경에서 자바 프로그램이 실행되는 상황에서 피터슨 알고리즘과 compare_and_swap 명령어를 사용한 동시성 문제가 발생하는 것 같습니다. 하지만 원하는 count값이 예상과 다른 값으로 나타난다고 말씀하신 것으로 보아, 문제가 발생한 원인을 파악해야할 것 같습니다.
문제의 원인을 찾기 위해서는 코드 상세 내용이 필요합니다. 코드를 더 자세히 공유해주시면 문제 해결에 도움이 될 것 같습니다. 또한, 윈도우즈 환경에서도 똑같은 동시성 문제가 발생한다고 말씀하셨는데, 이 역시 코드나 실행환경 등에 관련된 원인일 수 있습니다.
동시성 문제는 어려운 문제 중 하나이며, 많은 요소들이 영향을 줄 수 있습니다. 따라서, 코드와 실행환경을 자세히 분석하여 어떤 원인으로 인해 예상과 다른 결과가 발생하는지 파악하는 것이 중요합니다.
더 자세한 내용을 알려주시면 더 정확한 답변을 드릴 수 있을 것 같습니다. 감사합니다~