Атомарные типы: завершить вызов после выброса экземпляра "std::system_error"

Я следую этому уроку. Я могу скомпилировать пример из командной строки:

g++ -std=gnu++0x AtomicCounter.cpp -o AtomicCounter -lpthread

Работает нормально, но когда я бегу

./AtomicCounter

Это дает ошибку:

прекращение вызова после выброса экземпляра 'std::system_error' what(): включить многопоточность для использования std:: thread: операция не разрешена прервана (ядро сброшено)

Я разместил код AtomicCounter.cpp

#include <thread>
#include <atomic>
#include <iostream>
#include <vector>

struct AtomicCounter {
    std::atomic<int> value;

    AtomicCounter() : value(0) {}

    void increment(){
        ++value;
    }

    void decrement(){
        --value;
    }

    int get(){
        return value.load();
    }
};

int main(){
    AtomicCounter counter;

    std::vector<std::thread> threads;
    for(int i = 0; i < 10; ++i){
        threads.push_back(std::thread([&counter](){
            for(int i = 0; i < 500; ++i){
                counter.increment();
            }
        }));
    }

    for(auto& thread : threads){
        thread.join();
    }

    std::cout << counter.get() << std::endl;

    return 0;
}

РЕДАКТИРОВАТЬ:

Спасибо @Kerrek SB, он работает, когда я перешел на pthread вместо lpthread,

Но я не понимаю почему. Может кто-нибудь объяснить для меня?

Для получения дополнительной информации я побежал strace ./AtomicCounter

    access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/i386-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320]\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=134614, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7685000
mmap2(NULL, 111276, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7669000
mmap2(0xb7681000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18000) = 0xb7681000
mmap2(0xb7683000, 4780, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7683000
close(3)     

                       = 0

0 ответов

Другие вопросы по тегам