1. 程式人生 > >cmake配置基本工程和多執行緒

cmake配置基本工程和多執行緒

什麼是cmake?

大家都知道自linux上寫的c/c++程式,在編譯連結單個或者多個檔案時為了方便,我們都會寫一個MakeFile檔案,然後在命令列執行make命令。cmake就是生成MakeFile檔案的工具。
這是cmake的下載地址https://cmake.org/download/
如果你是ubuntu的話,直接下面執行命令安裝cmake:

sudo apt-get install cmake

cmake工程目錄結構

我這裡所說的工程目錄結構其實就是哪些檔案叫什麼名字,什麼檔案放到什麼資料夾下。當然這只是我自己的愛好,你也可以探索自己的風格。下圖是我的工程目錄結構:
這裡寫圖片描述

lib: 生成的庫檔案
src: 原始檔(.cpp

.cc)
include: 標頭檔案(.h .hpp)
build: 一般在這個資料夾下執行cmake ..(..之前有一個空格,表示你要使用的CMakeLists.txt檔案在當前的上層路徑),生成的Makefile檔案也在這個路徑下。
bin: 一般放生成的可執行檔案
CMakeLists.txt: cmake的配置檔案,關於配置檔案怎麼寫的教程(http://blog.csdn.net/kaizi318/article/details/7721624

我的CMakeLists.txt是這樣寫的:

#井好表示註釋
CMAKE_MINIMUM_REQUIRED( VERSION 2.8
) #設定最小版本號 PROJECT( test ) #設定工程名 SET(CMAKE_CXX_COMPILER "g++") #設定編譯器(可選的有gcc,g++) # 設定用debug還是release模式。debug允許斷點,而release更快 #set( CMAKE_BUILD_TYPE Debug ) set( CMAKE_BUILD_TYPE Release ) # 設定編譯選項 # 允許c++11標準、O3優化、多執行緒。match選項可避免一些cpu上的問題 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread"
) #設定可執行二進位制檔案的目錄 SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #設定存放編譯出來的庫檔案的目錄 SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #並且把該目錄設為連線目錄 LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib) #設定標頭檔案目錄 INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include) #增加子資料夾(注意我們的src路徑是通過子資料夾的形式新增的,在這裡面也是可以些CMakeLists.txt的) ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)

多執行緒

新建src/CMakeLists.txt

##src/CMakeLists.txt
ADD_EXECUTABLE( main  main.cpp )

新建src/main.cpp

//src/main.cpp
#include<iostream>  
#include<pthread.h>  
#include<unistd.h>  

using namespace std;
__thread int i = 1;

void* thread1(void* arg);
void* thread2(void* arg);

int main()
{
    pthread_t pthread1;
    pthread_t pthread2;
    pthread_create(&pthread1, NULL, thread1, NULL);
    pthread_create(&pthread2, NULL, thread2, NULL);
    pthread_join(pthread1, NULL);
    pthread_join(pthread2, NULL);
    return 0;
}
void* thread1(void* arg)
{
    cout<<++i<<endl;             //輸出 2  
    return NULL;
}
void* thread2(void* arg)
{
    sleep(1);                 //等待thread1完成更新
    cout<<++i<<endl;          //輸出 2,而不是3
    return NULL;
}

需要特別解釋的是:__thread是gcc,g++內建的用於多執行緒程式設計的基礎設施。用__thread修飾的變數,每個執行緒都擁有一份實體,相互獨立,互不干擾

最後進入build路徑,執行下面命令:

$ cmake ..
$ make
$ ../bin/main

以這種方式慶祝里約奧運也是不錯的選擇!

相關推薦

cmake配置基本工程執行

什麼是cmake? 大家都知道自linux上寫的c/c++程式,在編譯連結單個或者多個檔案時為了方便,我們都會寫一個MakeFile檔案,然後在命令列執行make命令。cmake就是生成MakeFile檔案的工具。 這是cmake的下載地址https://c

程序、執行執行基本概念

程序、執行緒和多執行緒基本概念 一、概念 1、程序(process) 狹義定義:程序就是一段程式的執行過程。 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

SpringBoot 定時執行配置執行執行

Spring Boot 的定時任務: 第一種:把引數配置到.properties檔案中: 程式碼: package com.accord.task;   import java.text.SimpleDateFormat; import java.util.Date;

程序執行的優缺點

在Linux下程式設計多用多程序程式設計少用多執行緒程式設計。          IBM有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖(windows2k的

關於程序,執行程序執行的網路程式設計

程序執行緒網路 多工程式設計 : 可以有效的利用計算機資源,同時執行多個任務 程序 : 程序就是程式在計算機中一次執行的過程 程序和程式的區別: 程式是一個靜態檔案的描述,不佔計算機的系統資源 程序是一個動態的過程,佔有cpu記憶體等資源,有一定的生命週期 * 同一個程式的不同執行過程即為不同的程序

Python之——Python中的程序執行

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83042246 一、多程序 Python實現對程序的方式主要有兩種,一種方法是使用os模組中的fork方法,另一種方法是使用multiprocessing模組。區別在於:

《Java》Java“定時器執行”實際應用——執行同步

一、任務目標     將任務<Java“定時器和多執行緒”實際應用——定時器配合多執行緒>中的兩個執行緒修改為互斥的,以保證兩個執行緒不會同時對此類屬性x進行修改。   二、執行緒同步機制     在Java中提供了同步機制,可以有效地防止資源衝突。同步機制使用 sy

《Java》Java“定時器執行”實際應用——定時器配合執行

一、任務目標     完成一個java application應用程式,此應用程式公共類有一個double型類屬性(變數)x,初始值為0;在應用程式主程序中新開兩個執行緒,這兩個執行緒都進行死迴圈;第1個執行緒每隔300ms啟用一次,令類屬性x自加1.0並輸出顯示;第2個執行緒每隔400

Linux程序執行的優缺點

教科書上最經典的一句話是“程序是作業系統分配的最小單位,執行緒是CPU排程的最小單位”。 多執行緒的優點: 1)它是一種非常”節儉”的多工操作方式。在Linux系統下,啟動一個新的程序必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這是一種”昂貴”

執行:執行建立3種方式(一)

執行緒  鎖Synchronized  搞明白 執行緒 鎖和多執行緒系列 1.執行緒建立 執行緒建立常見的三種方式: 繼承Thread類 實現Runnable介面

執行:鎖的5種分類(三)

重入鎖  中斷鎖  公平鎖  讀寫鎖  自旋鎖    1.重入鎖 2.中斷鎖 3.公平鎖 4.讀寫鎖

java併發執行

volatile—保證可見性、禁止指令重排序,不保證原子性 出於執行速率的考慮,java編譯器會把經常訪問的變數存放在快取,直接從快取中讀取變數,多執行緒下記憶體與快取不一樣 volatile不會被快取到暫存器,多執行緒下可見 使用條件: 只有單個執行緒更新變數的值 該變數不與

Python-爬取妹子圖(單執行執行版本)

一、參考文章     Python爬蟲之——爬取妹子圖片     上述文章中的程式碼講述的非常清楚,我的基本能思路也是這樣,本篇文章中的程式碼僅僅做了一些異常處理和一些日誌顯示優化工作,寫此文章主要是當做筆記,方便以後查閱,修改的地方如下: 1、異常處理

Python-爬取校花網視訊(單執行執行版本)

一、參考文章     python爬蟲爬取校花網視訊,單執行緒爬取     爬蟲----爬取校花網視訊,包含多執行緒版本     上述兩篇文章都是對校花網視訊的爬取,由於時間相隔很久了,校花網上的一些視訊已經不存在了,因此上

Python框架下django 的併發執行

django 的併發能力真的是令人擔憂,django本身框架下只有一個執行緒在處理請求,任何一個請求阻塞,就會影響另一個情感求的響應,尤其是涉及到IO操作時,基於框架下開發的檢視的響應並沒有對應的開啟多執行緒,再者Python的多執行緒對於多核CPU有效利用率非常低,參照 這裡就使用 nginx

定時器執行

定時器和多執行緒 1、任務簡介 本文分享的是杜老師《工程訓練》任務2.3中的普通任務,通過該任務我們可以初步學習Java中定時器與多執行緒的相關知識,該任務我是在5月完成的,但是一直未將該部分任務上傳,故今天對該部分任務的學習進行敘述,詳細的思路和程式碼在下文中進行分享。

linux程序執行

轉載自CodeUniverse的部落格 程序:可執行程式是儲存在磁碟裝置上的由程式碼和資料按某種格式組織的靜態實體,而程序是可被排程的程式碼的動態執行。 在Linux系統中,每個程序都有各自的生命週期。在一個程序的生命週期中,都有各自的執行環境以及所需的資源,這些資訊都記錄在各自的程序控制塊中,以便系統對

C#學習篇之基礎回顧(16)----- 程序執行

程序 程序(Process)是Windows系統的一個基本概念。一個應用程式在作業系統中執行被視為一個程序,程序可以包括一個或多個執行緒。 程序之間是相對獨立的,一個程序無法訪問另一個程序的資料(除非使用分散式計算方式),一個程序執行失敗也不會影響另一個程序。 執行緒

libevent原始碼分析--鎖執行

寫在前面: ​ 這個原始碼是分析libevent-2.0.20-stable, 並非最新版本的libevent,作者並沒有全看原始碼,在這裡會推薦以下參考的一些網站,也歡迎大家在不足的地方提出來進行討論。 鎖 ​ libevent的內部實現不需要多執行緒,

AsyncContext非同步執行區別

AsyncContext不是非同步輸出時使用的,而是同步輸出,但是解放伺服器端的執行緒使用,使用AsyncContext的時候,對於瀏覽器來說,他們是同步在等待輸出的,但是對於伺服器端來說,處理此請求的執行緒並沒有卡在那裡等待,則是把當前的處理轉為執行緒池處理了,關鍵就在於執行緒池,伺服器端會起一個執行緒