1. 환경 구성
헤더 파일의 #include 포함하면, 리눅스 멀티 스레딩에서 컴파일, 항상이 잘못보고됩니다
:对‘pthread_create’未定义的引用
당신은 CMakeLists.txt의 관련 라이브러리에 링크를 사용할 수 있습니다
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
set_property(TARGET my_app PROPERTY COMPILE_OPTIONS "-pthread")
set_property(TARGET my_app PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries(my_app "${CMAKE_THREAD_LIBS_INIT}")
endif()
참조 http://www.itkeyword.com/doc/1866142651042956x118/cmake-linux
2. 실습 , 다중 스레드 아주 좋은 블로그를 찾을 학습
C ++ 11 멀티 스레드 프로그래밍 (A) : 스레드를 만들 수있는 세 가지 방법
https://blog.csdn.net/lijinqi1987/article/details/78396512
멀티 스레드 프로그래밍 C ++ 11 (b)와 결합 나사를 분리
https://blog.csdn.net/lijinqi1987/article/details/78396758
멀티 스레드 프로그래밍 C ++ 11 (c) : 신중 스레드 파라미터 전달
https://blog.csdn.net/lijinqi1987/article/details/78404092
세 번째 부분은 포인터가 스레드로 클래스의 멤버 함수를 지정 orbslam 기능이 자주 사용된다
위한 용도
#include<iostream>
#include<thread>
class DummyClass{
public:
DummyClass(){}
DummyClass(const DummyClass& obj){ }
void sampleMemberfunction(int x)
{
std::cout<<"Inside sampleMemberfunction "<<x<<std::endl;
}
};
int main()
{
DummyClass dummyObj;
int x = 10;
std::thread threadObj(&DummyClass::sampleMemberfunction,&dummyObj,x);
threadObj.join();
return 1;
}
C ++ 11 멀티 스레드 프로그래밍 (IV) : 데이터 공유 및 경쟁 조건
https://blog.csdn.net/lijinqi1987/article/details/78405623
작은 실수가있어 프로그램의 라인 (34) = "해야한다 = "를"= "
if ((val = testMultithreadWallet()) != 5000)
내부는 다음 각 실행에 대한 결과는 주님이 현상이 일치했다 제목으로, 다른 발견,하지만 이유를 알고하지 않는 한이 프로그램을 실행 한 결과는, 나의 결과는 4000 위안 밖에있는
jlm@jlm-X450VE:~/桌面/build$ ./Test
Error at count = 945 Money in Wallet = 4000
Error at count = 961 Money in Wallet = 4000
jlm@jlm-X450VE:~/桌面/build$ ./Test
Error at count = 983 Money in Wallet = 4000
jlm@jlm-X450VE:~/桌面/build$ ./Test
jlm@jlm-X450VE:~/桌面/build$ ./Test
jlm@jlm-X450VE:~/桌面/build$ ./Test
Error at count = 119 Money in Wallet = 4000
Error at count = 448 Money in Wallet = 4000
C ++ 11 멀티 스레드 프로그래밍 (E) : 사용 뮤텍스 수리 경쟁
https://blog.csdn.net/lijinqi1987/article/details/78412183
mMoney이 돈의 내부 코드의 첫 번째 10 줄의 마지막 단락으로 변경해야합니다
문서 내용 간략한 소개
//第一种修复竞争方法
std::mutex mutex;
{
mutex.lock();
fun();
mutex.unlock();
}
//第二种修复方法
{
std::lock_guard<std::mutex> lockGuard(mutex)
fun();
}
첫 번째보다 조금 더 나은 두 번째 방법 때문에뿐만 아니라, 비정상적인 내부 중괄호, 여기에 더 나은 다른 표준에서 배운 방법 때 자동으로 잠금 해제, 잠금 해제가 발생할 수있는 중괄호의 끝에서 실행할 수 있습니다 :: unique_lock는 여전히 볼 수 오늘, 이해하지 못했다