공돌이는 파닥파닥

결과

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

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

arch=$(uname -m)
if [ "$arch" == "i686" -o "$arch" == "i386" -o "$arch" == "i486" -o "$arch" == "i586" ]; then
flag=1
else
flag=0
fi
echo "Installing OpenCV 2.4.2"
mkdir OpenCV
cd OpenCV
echo "Removing any pre-installed ffmpeg and x264"
sudo apt-get remove ffmpeg x264 libx264-dev
echo "Installing Dependenices"
sudo apt-get install libopencv-dev
sudo apt-get install build-essential checkinstall cmake pkg-config yasm
sudo apt-get install libtiff4-dev libjpeg-dev libjasper-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev
sudo apt-get install python-dev python-numpy
sudo apt-get install libtbb-dev
sudo apt-get install libqt4-dev libgtk2.0-dev
echo "Downloading x264"
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20120528-2245-stable.tar.bz2
tar -xvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable/
echo "Installing x264"
if [ $flag -eq 1 ]; then
./configure --enable-static
else
./configure --enable-shared --enable-pic
fi
make
sudo make install
cd ..
echo "Downloading ffmpeg"
wget http://ffmpeg.org/releases/ffmpeg-0.11.1.tar.bz2
echo "Installing ffmpeg"
tar -xvf ffmpeg-0.11.1.tar.bz2
cd ffmpeg-0.11.1/
if [ $flag -eq 1 ]; then
./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
else
./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-shared
fi
make
sudo make install
cd ..
echo "Downloading v4l"
wget http://www.linuxtv.org/downloads/v4l-utils/v4l-utils-0.8.8.tar.bz2
echo "Installing v4l"
tar -xvf v4l-utils-0.8.8.tar.bz2
cd v4l-utils-0.8.8/
make
sudo make install
cd ..
echo "Downloading OpenCV 2.4.2"
wget -O OpenCV-2.4.2.tar.bz2 http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.2/OpenCV-2.4.2.tar.bz2/download
echo "Installing OpenCV 2.4.2"
tar -xvf OpenCV-2.4.2.tar.bz2
cd OpenCV-2.4.2
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE ..
make
sudo make install
sudo echo “/usr/local/lib” >> /etc/ld.so.conf
sudo ldconfig
echo "OpenCV 2.4.2 ready to be used"

Comment +0