기존의 전통적인 동기화 기법은, 락을 사용해서
임계영역을 만나게 되면, 공유변수를 보호하기 위하여
모든 스레드를 일시 정지 한 뒤,
임계영역을 만난 스레드 혼자 처리를 하고, 처리가 끝나면
다시 모든스레드를 깨운다.
잖아
내가 생각해본건
임계영역을 만날 시, 해당 스레드 혼자 일단 정지(대기) 하는거임
그리고, 내가 제일 먼저 왔당! 이라고 발자국을 찍어서, 접근기록을 큐에 넣어놓는거임
다른 스레드들은 여전히 돌고있고, 다른스레드들도 임계영역을 만나면 접근기록을 큐에남김
그리고 임계영역에 해당하는 명령어집단 도 함께 큐에 들어가는데
가령 A번스레드 B번스레드 C번스레드가 있고, B-A-C 순서로 공유변수에 접근했으면
제일 먼저 임계영역에 접근한 B는 큐에 아무것도 없으니 그냥 바로 임계영역이 실행되면서 자신의 접근기록을 큐에 남기고,
두번째로 접근한 A번은 B의 접근기록이 큐에 있으니, B의 임계영역을 실행한 뒤, 자신의 임계영역을 실행, 마찬가지로 큐에 접근기록 남기고
C는 B->A 임계영역을 순차적으로 실행 한 뒤에 자신의 임계영역을 실행하면...
그러니까, 기존의 스레드가 자기 혼자 독차지하려고 다른 스레드를 모두 멈춰놓았다면
내가 생각해본거는
공유변수에 접근한 스레드의 기록과 임계변수영역의 처리목록을 큐잉하고,
먼저 접근한 스레드(큐잉된)가 있으면, 그걸 순차적으로 실행한 뒤에, 자신의 것을 실행하는거
동기적으로 동작하면서, 자기 자신 스레드만 멈추고,
다른 스레드는 여전히 돌고 있는걸로 성능극대화?! 라는 생각을 해봣는데..
어떠함?
좋은것같네요
큐를 비우는건 , 해당 큐를 참조하는카운트가 없으면 걍 지워지게 하면될거같구..
175 208 왜 지움? 찾아보니까 JOB QUEUE 진짜 있길래 와 시발 왜 내가 생각한건 다 이미 있지, 그리고 왜 난 그걸 몰랏지 하고 적으려고햇는데
큐에 할 일을 쳐넣는게 좋을듯
잡큐는 니가 말한거랑 좀 다른거 같아서 지움
비밀기술이라 들키면 처형당해서 지움
니가 구구절절 싸놓은 그게 세마포어여ㅋㅋ
ㄴ 자기 혼자만 멈추고, 다른 스레드는 락없이 쌩쌩... 할수있지 않을까 적어본건데.. 어차피 공유변수문제만 해결되면 다른 스레드가 멈출이유는 없고, 공유변수라는것도 함수가 호출된 시점에서의 실제변수에 대해서, 명령어가 트렌젝션처럼 단위적으로 실행되는것이 중요할 뿐인거니까,
생각한걸 구현해보기나 해
멈춘다는게 뭔 소리여ㅋㅋ 크리티컬 섹션에 도달해서 그걸 실행하려는 애가 멈춰버리면 어떡하냐?
임계영역 말한거는 실제 크리티컬 섹션이 아니라, 동기화 해야 하는 영역 말하건데, 내가 잘못적음
근데 씨발 존나 좆같이 말하내 개새끼가
이런걸로 쉽게 흥분하네 고혈압 조심해라
\'크리티컬 섹션\'이나 \'동기화 해야 하는 영역\'이나 뭐가 다르냐. 이 새끼 뻘글에 진지하게 답글 싸줬더니 오히려 욕질이네?
ㄴ크리티컬섹션은 그냥 내가 쓸태니 딴놈 다꺼져 하는거고 병신아, 화장실예시는 아냐? 근데 거기서 보면 CS고 세마포어고 뮤텍스고 화장실 들어가는거에만 신경쓰는데
중요한건 똥싸고 오줌싸는거지 화장실 들어가는게 문제냐? 내가 적은건 똥이나 오줌은 밖에서 대충 싸고, 딴놈한테 맺겨놓으면 그놈아 알아서 처리해라는거지 그리고 진지하게 답글? 지랄
뽀큐나 먹어라
내가 존나 대인배라 열 안 내고 공부할 거리 알려준다. 스택, 큐 같은 기초적인 자료구조들을 compare-and-swap을 써서 락 안 쓰고 구현하는 lock-free algorithm이나, 다른 애들이 critical section에 도달하지 않는다고 가정하고 락 없이 그냥 실행해놓고 나중에 정말 그랬는지 확인하고 진짜 그랬을 때 commit하고 아니면 rollback이나 abort, retry를 하는 transactional memory나 speculative lock elision에 대해서 알아봐라.
병신아 다아는거임 꺼져
어휴 병신 아는척 좆지랄
화장실에 들어가야 똥오줌을 싸지 병신아ㅋㅋㅋㅋㅋㅋㅋㅋ 화장실 밖에서 똥오줌 싸는 너야말로 개새끼네ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
디게 멍청하네요!
말끼 못알아먹는거봐랑 ㅋㅋ
화장실 밖에서 남정네 셋이서 마주보고 오줌 싸면 그거 참 보기 좋은 광경이겠다^^ 쓰리섬게이개새끼 화이팅!
a=a+1 이걸 오줌싸는 행위라고 하고, a에 대한 exclusive access를 얻는 걸 화장실에 들어간다고 해 보자. 화장실에 안 들어가고 남정네 셋이 밖에서 아무렇게나 대충 싸면 결과가 참도 제대로 나오겠다? 쓰레섬게이개새끼 화이팅!
사고가 틀에 박혀서는ㅋㅋ 그래가지고 프로그래머하겟냐? 존나 남의소스 긁어다 복붙이나 하고 살놈이넹 ㅋ 니도 화이팅!
글 읽을줄 모르냐? 밖에다 싸면 알아서 처리하게 하면 어떨까 라는건데 게이 드립치는놈치고 게이 아닌놈없드라만 ㅋㅋ 게이임?
비현실적인 망상이 창의력으로 대접받는 시대는 절대 오지 않아^^ 좆 같은지 봐달래서 좆 같길래 좆 같다고 말해줬더니 좆나 좆같이 화내네ㅋ
\'알아서 처리하게\'가 \'스레드 동기화 아이디어\'라니 존나 참신하다!!
ㄴ 누가대접해달래디? 생각해본건데 어떠냐는거고, 나름 구체적으로 적어놧는데 남의 글 제대로 읽어보지도 않고 댓글달면서, 까니까 개나소나 다 아는거 아는척좆지랄이나 해대고 ㅉㅉ
ㄴ 참신같은소리하네 병신 본문에 적어놧잖아 댓글 적을 때마다 그걸 구구절절 다 적어야됨?
내가 물어보는거 하나도 대답 못하는데 뭐가 구체적이라는 거지? 쓰레드가 멈추는 게 뭐냐니까? 크리티컬 섹션을 실행해야 할 새끼가 멈춰버리면 어떡하냐고?
ㄴ 본문에 적어놓은거 보라고 병신아
내가 다시 읽어본 바에 의하면... B가 크리티컬 섹션에 도착했을 때 락 acquire 없이 바로 크리티컬 섹션을 실행시키고 B가 지나갔다고 큐에 적어놓으면, 그 다음에 온 A가 그 큐에 있는걸 보고서 B가 실행했던 코드를 반복한 다음에 자신의 크리티컬 섹션을 실행하고 또 A가 지나갔다고 적어놓고, 또 그 다음에 온 C는 B랑 A가 실행했던 코드를 또 반복한 다음에 자기거 실행해 놓고 C가 지나갔다고 추가해 놓는다는 이야기냐?
ㄴ 넵..그러함. 읽어주셧군요. 욕한거 ㅈㅅ
그게 씨발 백만배는 더 좆병신이다. 큐가 계속 길어지고 횟수가 반복될수록 작업량이 늘어나는 문제는 둘째치고, B-A-C순으로 도달하긴 하는데, B가 자신의 크리티컬 섹션을 완료하고 \'나 지나갔음\' 표시를 하기 전에 A가 자신의 크리티컬 섹션에 도달하면, A는 아무도 안 지나간 줄 알고 자기 할 일을 시작할텐데, 그러면 동기화는 개뿔이지?
그리고 B가 완료된 다음에 A가 도달했을 때, 큐에 \'B 지나갔음\' 표시가 있다면 A는 B의 작업이 완료된 걸 알텐데 뭐하러 B의 코드를 반복해? 그냥 공유변수 쓰면 되지.
ㄴ ㄴㄴ 크리티컬 섹션 완료하기 전에 발자국부터 남기고, 다른 스레드는 발자국만 보고 일단 대기하고, 발자국에 해당하는 명령어집단큐가 마저 채워질때까지(말씀하신대로 바로되지는않을테니) 기다리면서 동기적으로 동작하는 소켓함수들 처럼 대기타면 동기화 되지 않을까요?
긴댓글 다 안읽고 글만 보고 댓글싸는데 스레드 하나가 임계영역에 진입하면 나머지 다른스레드들은 어디를 실행하고 있던간에 다 멈춘다고 생각하고 잇는건가 그냥 이 아이디어는 진입순서만 맞춰주는 .. 걍 세마포어 얘기 아니냐
세마포어랑 별 다를게 없을까요?
큐는 일정시간마다 전체 다 멈추고 공유변수에 정산하고 큐 비우는 식으로 생각햇엇는데.. 그거때매 크리티컬섹션이랑 별 차이없어지는거 아닌가 싶어서 짜려다가 걍 글만적어봣는데..
\"크리티컬 섹션 완료하기 전에 발자국부터 남기고, 다른 스레드는 발자국만 보고 일단 대기하고, 발자국에 해당하는 명령어집단큐가 마저 채워질때까지 기다리면서\" 이거부터가 다른 락이랑 다를 게 하나도 없는데?
아..그러네.. 나의 패배다. 깝처서 ㅈㅅ
그냥 트렌젝셔널 메모리가 나올때까지 싱글스레드나, 락필요없게 기능별로 스레드 나눠서 짜야징..
ㅠㅠ
생각해보니 그닥 다를거없는데 왜 스스로 참신하다고 생각하게 된거지?... 흠...