공돌이는 파닥파닥

Ubuntu 12.04.1에서.


매번 패키지 업데이트를 하다 보면


자꾸 그래픽 드라이버를 건드리는데,


재부팅을 하고 나면 번번히 해상도가 낮은 상태에서 벗어나질 못한다.


지난 번에는 이렇게 나오다가 아싸리 검은 화면이 나오고 뭐.. 그랬었는데

(그래서 결국 싹 밀고 다시 설치 했는데)


이제는 겁도 나지 않고 짜증도 나지 않는다!


Ctrl+Alt+F1(혹은 F2~F6, F8)을 눌러 콘솔을 띄움.


$ sudo service gdm stop

만약 lightdm을 쓰고 있다면

$ sudo service lightdm stop


한 후, 나의 경우 cuda tool kit의 드라이버를 설치해야 하므로


$sudo CUDA설치하는못된파일


그리고 설치를 끝낸 후


$sudo service gdm start


하면 끝...

Comment +0

결과

위 코드는 중간중간 수정해서 컴파일이 안될 수 있는데, 얘기하고자 하는 바는

tbb를 이용하여 스레드를 돌리고 boost를 이용해 conditional variable을 사용한 경우

pthread를 이용한 것과 같은 결과가 나온다는 것이다.

*심지어 프로세스가 terminate도 되지 않는다.

결과2

그래서 나온 코드.

원하는 대로 잘 돌아 간다.

마지막에 delete를 안했는데, 뭐.. 크게 상관은 없는 듯.

오히려 포인터를 이용한 new가 아니라 지역변수로 잡고 그 주소를 넘긴 경우

희안하게도 ~thread()에서 같은  공간을 delete 한다며 SIGART가 뜬다.


이 모든 것은 멀티스레드 환경에서 conditional variable과 queuing lock을 사용하기 위함...

boost에서 lock이 lock_free() 혹은 only local spinning인지 알 수가 없으므로..


Comment +0


그나저나 tbb에서 conditional variable이 아직 미흡할 줄은 몰랐다.

아니면 내가 공부를 미진하게 한거겠지 -_-;


*그런데 이렇게 하면 이상하게도 7개 정도의 스레드만 wait을 하다가 signal을 받고 다른 애들이 wait을 하기 시작한다.

*확인되지는 않았지만 문제가 있는 것이 분명하므로.. 다른 방법을 생각해 봐야 한다.

Comment +0