리눅스 간단한 멀티 스레드 응용 프로그램

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는 여전히 볼 수 오늘, 이해하지 못했다

추천

출처blog.csdn.net/qq_34122731/article/details/90730587