这是我第一次来这里...... 我正在尝试使用多线程C ++代码。 我在Mac OSX 10.7.2上。 因为操作系统和编译器太旧而且不支持c ++ 11, 我按照这里的说明操作 https://solarianprogrammer.com/2013/06/11/compiling-gcc-mac-os-x/ 我似乎有一个工作gcc 4.9.1,但后来我尝试做了一些 多线程。
#include <thread>
using namespace std;
class X {
public:
char *p;
X() : p(0) { }
~X() { if (p) delete[] p; }
void set(int n) { p = new char[n]; }
};
void task()
{
static thread_local X x;
x.set(8*23);
}
int main()
{
thread t1(task);
thread t2(task);
thread t3(task);
thread t4(task);
thread t5(task);
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
}
好吧,如果我将其编译为
/usr/gcc-4.9.1/bin/g++-4.9.1 -g -std=c++11 simple.c
我得到这样的错误:
a.out(50392,0x100605000)malloc: *对象0x137fe130400db0的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试 非法指令:4
a.out(50405,0x102a70000)malloc: *对象0x137fcf22500060的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试 非法指令:4
我尝试添加-pthread和-lpthread作为命令行选项,但这没有帮助。 我也添加了print语句,它显示错误消息中的地址是静态本地对象本身的地址。
也许我正试图在一个过时的环境中运行它。 或者也许正确的运行时没有被链接。 我不确定那里是否有人可以提供帮助...也许我只需要访问 一个更新的系统。
谢谢!