1

デッドロックとその検出に関するコードを書いています。Ubuntu 12.10、64 ビットで eclipse Juno C/C++ を使用しています。問題は私が使用するときです

スリープ(1)

、私はこれを得る

sleep はこのスコープで宣言されていませんでした

プロジェクトをビルドするときに、含めようとしました

インクルード < 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);
}
........

ps私はこれらの指示に従ってpthreadsを他のプロジェクトで動作させ、このプロジェクトでも同じことをしました http://blog.asteriosk.gr/2009/02/15/adding-pthread-to-eclipse-for-using-posix-スレッド/

ps私は友人とこのプロジェクトに取り組んでおり、彼が使用しているのと同じコードを使用しましたが、彼はそうではありませんが、それでもエラーが発生します

4

2 に答える 2

1

スリープ関数のルックアップの問題を修正すると#include < unistd.h>、pthreadライブラリの問題が発生します。

#include <pthread.h>次に、アプリケーションをpthreadライブラリにリンクする必要があります

于 2012-11-27T02:07:28.860 に答える
0

2つの異なるエラーがあるようですが、

sleep()unistd.hを含めるのを忘れたため、最初は未定義です。pthread.hも含めますが、含めたヘッダーの1つに引っ張られる可能性があるようです。

次に、リンカーエラーの追加があるようです。-pthreadを使用してコンパイルするか、リンカーに-lpthreadを追加できます。表示されない理由は、ファイルがコンパイルされた後にのみリンクを実行でき、最初のエラーがこれをブロックしているためです。ldは何らかの理由で-pthreadを好まないに違いありません(libpthread-devをインストールしましたか?)。-pthreadを-lpthreadに変更してみてください。

于 2012-11-27T02:12:03.003 に答える