C++睡眠pthread冲突

C++ sleep pthread conflict

本文关键字:冲突 pthread 睡眠 C++      更新时间:2023-10-16

我正在写一段关于死锁及其检测的代码,我在Ubuntu 12.10上使用eclipse Juno C/C++,64位。问题是当我使用时

睡眠(1)

,我得到这个

sleep未在此范围中声明

当我构建项目时,我试图包括

include<unistd.h>

,但是所有pthread函数都像一样

pthread_join

给我类似的错误

对pthread_join 的未定义引用

,没有#include<unistd.h>这样的错误不会出现。

示例代码:

#include <unistd.h>
#include <iostream>
#include <semaphore.h>
#include <queue>
#include <stdlib.h>
using namespace std;
pthread_mutex_t mutex;
sem_t sem; //used for writing in the console
.......
void cross(Batman b) {
// code to check traffic from the right, use counters, condition
sem_wait(&sem);
cout << "BAT " << b.num << " from " << b.direction << " crossing" << endl;
sem_post(&sem);
sleep(1);
}
........

附言:我按照这些说明让pthreads在其他项目中工作,我也为这个项目做了同样的事情http://blog.asteriosk.gr/2009/02/15/adding-pthread-to-eclipse-for-using-posix-threads/

p.s.我正在和一个朋友一起做这个项目,我使用了他使用的相同代码,但仍然会出现这些错误,而他没有

当您#include < unistd.h>时,您修复了睡眠函数查找问题,现在您有pthread库问题。

接下来,您需要#include <pthread.h>并将您的应用程序与pthread库链接

听起来你有两个不同的错误,

第一个sleep()是未定义的,因为您忘记包含unistd.h。我也会包含pthread.h,但听起来它可能会被您包含的某个标头拉入。

其次,听起来你有一个链接器错误。另外,你可以用-phread编译,也可以把-lpthread添加到链接器中。它没有显示的原因是,只有在编译完文件后才能进行链接,而第一个错误就是阻止了链接。我敢打赌,ld出于某种原因不喜欢-ppthread(你安装了libpthread-dev吗?)。您可以尝试将-phread更改为-lpthread。