2017-08-29 5 views
3

Großartig!Threads - Mac vs Linux

Ich habe gerade meine Implementierung auf Mac mit g++/clang

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1 
Apple LLVM version 8.1.0 (clang-802.0.42) 
Target: x86_64-apple-darwin16.7.0 
Thread model: posix 

und getestet meinen Code auf Linux

g++ (Debian 4.7.2-5) 4.7.2

ein relativ einfaches Einfädeln des laufenden Betriebs. Was auf dem Mac gearbeitet, nicht auf Linux jetzt mit:

terminate called after throwing an instance of 'std::system_error' 
    what(): Operation not permitted 

#include <cstddef> 
#include <memory> 
#include <stdlib.h> 
#include <iostream> 
#include <thread> 
#include <vector> 
#include <stdexcept> 


std::vector<std::thread> threads; 
      std::vector<std::tuple<std::size_t, std::size_t>> parts = splitRows(maxNumberThreads, elements); 

      for (std::size_t threadIndex = 0; threadIndex < maxNumberThreads; threadIndex++) 
      { 
       threads.push_back(std::thread(compute<T>,parts[threadIndex], numbers, std::ref(*this),std::ref(other),std::ref(target))); 
      } 

mit der Funktion Thread definiert. Hinzufügen von Prints in compute es springt überhaupt nicht in die Funktion ... Eine Idee, warum dies passiert?

template<typename T> 
void compute(const std::tuple<std::size_t,std::size_t> part, 
      const std::size_t numbers, 
      const MyClass<T>& m1, 
      const MyClass<T>& m2, 
      MyClass<T>& target){ 

Ich Kompilieren mit

g++ -Wall main.cpp -o matrix.exe -std=c++11 

aber den obigen Laufzeitfehler erhalten. Irgendwelche Ideen, wie das zu beheben ist? Ich benutze std Bibliotheken nur, nichts Besonderes ...

Antwort

2

Sie nicht Pthread richtig verknüpfen, versuchen Sie folgenden Befehl,

g++ -Wall main.cpp -o matrix.exe -pthread -std=c++11 

Hoffnung, das hilft.

+1

Ja, hat funktioniert. Vielen Dank! Warum benötigt Linux pthread, während mac ohne umgehen kann? –