我有史以来最简单的代码:
#include <iostream>
#include <thread>
void worker()
{
std::cout << "another thread";
}
int main()
{
std::thread t(worker);
std::cout << "main thread" << std::endl;
t.join();
return 0;
}
尽管我仍然无法编译g++
运行它。
更多细节:
$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译命令:
$ g++ main.cpp -o main.out -pthread -std=c++11
运行:
$ ./main.out
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
现在我陷入困境。在Internet上的每个相关线程中,建议在-pthread
已经拥有的情况下添加它。
我究竟做错了什么?
PS:这是全新的ubuntu 13.10安装。只有g++
包安装和次要之类的东西chromium
等
PPS:
$ ldd ./a.out
linux-vdso.so.1 => (0x00007fff29fc1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb85397d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb853767000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb85339e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb85309a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb853c96000)
PPPS:使用clang++
(v3.2)可以编译并正常运行
PPPPS:伙计们,这不是Linux下在GCC中使用std ::thread的正确链接选项是什么的重复项?
PPPPPS:
$ dpkg --get-selections | grep 'libc.*dev'
libc-dev-bin install
libc6-dev:amd64 install
libclang-common-dev install
linux-libc-dev:amd64 install
答案是由SO C++聊天的一位好心人提供的。
看来此行为是由gcc中的错误引起的。
该错误讨论的最后评论中提供的解决方法 确实 可以解决该问题:
-Wl,--no-as-needed
首先,我的问题是,为什么编译线程占用大量的CPU,以及如何最小化这一点,以便我们可以将CPU分配给其他线程。 提前感谢!
我想编译并运行一个简单的Hello World程序,该程序声明并调用Java中的本机print方法(用C定义)。 java下载 CPP. cpp 在命令提示符中,我运行以下命令: javac HelloCPP. java javah-jni HelloCPP 86_64-w64-ming w32-g-c-I"C:\Java\jdk1.8.0_171\include"-I"C:\Java\jdk1.
其实创建线程之后,线程并不是始终保持一个状态的,其状态大概如下: New 创建 Runnable 就绪。等待调度 Running 运行 Blocked 阻塞。阻塞可能在 Wait Locked Sleeping Dead 消亡 线程有着不同的状态,也有不同的类型。大致可分为: 主线程 子线程 守护线程(后台线程) 前台线程 简单了解完这些之后,我们开始看看具体的代码使用了。 1、线程的创建 Pyt
我有一个简单的JNI.dll,试图在测试Java应用程序中使用它。它是一个文件,由几个函数组成,头部由生成。(我正在使用MinGW btw编译) 如果我用GCC编译并链接这段代码,我就可以很好地用system.loadLibrary()加载.dll并使用它。但是,如果我用G++编译它,将失败,出现可怕的“UnsatisfiedLinkError”。 g++-wl,--add-stdcall-ali
如果以下代码在多线程应用程序中可以工作,您可以帮助我吗。 这是我的Java脚本,将由Nashorn评估 这就是我创建脚本引擎的方式 在使用Testng进行测试时,此操作不会出现任何错误 测试结果1-请注意,有些数据是重复的 但是,如果我添加"并行=true"到@DataProvider我的脚本开始失败 测试结果2-请注意,重复一些数据,以表明相同的参考编号可能在测试过程中随机失败 有人可以确认我是
9.3.3 多线程编程的应用 线程原本是操作系统中的概念,是操作系统用于实现系统功能的工具。现在线程已演变成为用户程序可使用的工具,广泛用于应用程序设计。 多线程技术主要用于需要并发执行的场合。例如在很多游戏程序中,都需要维持一个动画场景,而玩家可以通过鼠标或键盘来输入操作指令,控制游戏的进行。假如程序只有一个 控制流,则当程序执行到等待用户输入指令的时候,由于用户输入较慢(相对 CPU 速度来