C++11 멀티스레드 시작

4506 단어
스레드 생성
#include //C++11        
thread t(TestThreadFun);//thread t= thread
(TestThreadFun);//                TestThreadFun
thread* pt = new thread(TestThreadFunction);//           ,           ,             。
  • 스레드 폐기 방법은 2가지
  • detach: 라인과 주 라인 사이의 관계를 끊는다
  • join:join 방식이라면 메인 라인은join의 라인이 끝나야 실행할 수 있습니다
  • t.detach();

  • 상호 배척 자물쇠
    #include//     
    mutex g_Mutex1;//       
    int g_num=0;
    lock_guard _selfunlock(g_Mutex1);//   ,         
    g_Mutex1.lock();//  
    g_num++;
    g_Mutex1.unlock();//  
    
  • 상호 배척 자물쇠를 사용할 때 공공 데이터 포인트의 안전을 보장할 수 있지만 자물쇠의 데이터 범위를 함부로 사용할 수 없다. 가능한 한 작게 하고 자물쇠가 많을수록 느리고 자물쇠가 많을수록 느리다.

  • 원자 변수
    #include
     
    atomicg_num_ato;//atomic_int g_num_ato;//    
    atomic_int//    
    
    //         
    
    typedef atomic atomic_bool;
    
    typedef atomic atomic_char;
    typedef atomic atomic_schar;
    typedef atomic atomic_uchar;
    typedef atomic atomic_short;
    typedef atomic atomic_ushort;
    typedef atomic atomic_int;
    typedef atomic atomic_uint;
    typedef atomic atomic_long;
    typedef atomic atomic_ulong;
    typedef atomic atomic_llong;
    typedef atomic atomic_ullong;
    
    typedef atomic atomic_char16_t;
    typedef atomic atomic_char32_t;
    
    typedef atomic atomic_wchar_t;
    
    typedef atomic atomic_int8_t;
    typedef atomic atomic_uint8_t;
    typedef atomic atomic_int16_t;
    typedef atomic atomic_uint16_t;
    typedef atomic atomic_int32_t;
    typedef atomic atomic_uint32_t;
    typedef atomic atomic_int64_t;
    typedef atomic atomic_uint64_t;
    
    typedef atomic atomic_int_least8_t;
    typedef atomic atomic_uint_least8_t;
    typedef atomic atomic_int_least16_t;
    typedef atomic atomic_uint_least16_t;
    typedef atomic atomic_int_least32_t;
    typedef atomic atomic_uint_least32_t;
    typedef atomic atomic_int_least64_t;
    typedef atomic atomic_uint_least64_t;
    
    typedef atomic atomic_int_fast8_t;
    typedef atomic atomic_uint_fast8_t;
    typedef atomic atomic_int_fast16_t;
    typedef atomic atomic_uint_fast16_t;
    typedef atomic atomic_int_fast32_t;
    typedef atomic atomic_uint_fast32_t;
    typedef atomic atomic_int_fast64_t;
    typedef atomic atomic_uint_fast64_t;
    
    typedef atomic atomic_intptr_t;
    typedef atomic atomic_uintptr_t;
    typedef atomic atomic_size_t;
    typedef atomic atomic_ptrdiff_t;
    typedef atomic atomic_intmax_t;
    typedef atomic atomic_uintmax_t;
    

    다중 스레드 진행률 막대 연습
  • 리소스를 불러오는 함수
  • 를 라인으로 호출합니다(매번 순환할 때마다 무작위로 기다립니다. 전역의 진도 변수를 한 번도 순환하지 않았습니다). 메인 라인에서 전역 진도 변수를 순환적으로 방문하여 현재의 진도를 백분율 출력으로 바꾸고 진도 표시줄의 변화를 그립니다
  • printf(현재 스레드의 id:%d,this thread::get id();//스레드 id 가져오기
  • this_thread::sleep_for(std::chrono::seconds(rand()%5+1));//#include 또는 도입 헤더 파일
  • #include
    #include
    #include
    #include
    using namespace std;
    
    atomicg_num_ato=0;
    
    void fun(int n)
    {
    	for (int i = 0; i < n; i++)
    	{
    		g_num_ato++;
    		this_thread::sleep_for(std::chrono::seconds(rand()%5+1));
    	}
    }
    int main()
    {
    	thread t = thread(fun,100);
    	t.detach();
    	
    	while (g_num_ato <100)
    	{
    		system("cls");
    		int iTemp = g_num_ato;
    		cout << "    :" << iTemp << "%" << endl;
    		for (int i = 0; i < iTemp /5; i++)
    		{
    			cout << "★";
    		}
    	}
    	cout << "    "<

    좋은 웹페이지 즐겨찾기