C ++睡眠pthread冲突

时间:2012-11-27 01:45:09

标签: c++ eclipse pthreads mutex sleep

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

  

睡眠(1)

,我明白了

  

在此范围内未声明睡眠

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

  

包括< 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);
}
........

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

P.S。我正在和一位朋友一起开展这个项目,并且我使用了他使用的相同代码但仍然得到了这些错误,而他却没有

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

第一个sleep()未定义,因为您忘记包含unistd.h。我还包括pthread.h,但听起来它可能被你包含的一个标题所吸引。

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