我正在编写一个关于死锁及其检测的代码,我在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。我正在和一位朋友一起开展这个项目,并且我使用了他使用的相同代码但仍然得到了这些错误,而他却没有
答案 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。