Сначала предоставим некоторый контекст, это для назначения, включающего семафоры.Мы должны найти код для проблемы столовых философов, заставить его работать, а затем выполнить некоторый анализ и манипулирование.Однако я застрял с ошибкой.
Оригинальный код взят из http://www.math -cs.gordon.edu / courses / cs322 / projects / p2 / dp / с использованием решения C ++.
Я получаю в Code :: Blocks ошибку
philosopher.cpp|206|error: 'Philosopher_run' was not declared in this scope|
, и эта ошибка возникает в строке:
if ( pthread_create( &_id, NULL, (void *(*)(void *)) &Philosopher_run,
this ) != 0 )
Я посмотрел метод pthread_create, но не смог это исправитьошибка.Если бы кто-нибудь мог объяснить мне, как исправить эту ошибку, а также почему она возникает, я был бы очень признателен.Я пытался предоставить только соответствующий код.
class Philosopher
{
private:
pthread_t _id;
int _number;
int _timeToLive;
public:
Philosopher( void ) { _number = -1; _timeToLive = 0; };
Philosopher( int n, int t ) { _number = n; _timeToLive = t; };
~Philosopher( void ) {};
void getChopsticks( void );
void releaseChopsticks( void );
void start( void );
void wait( void );
friend void Philosopher_run( Philosopher* p );
};
void Philosopher::start( void )
// Start the thread representing the philosopher
{
if ( _number < 0 )
{
cerr << "Philosopher::start(): Philosopher not initialized\n";
exit( 1 );
}
if ( pthread_create( &_id, NULL, (void *(*)(void *)) &Philosopher_run,
this ) != 0 )
{
cerr << "could not create thread for philosopher\n";
exit( 1 );
}
};
void Philosopher_run( Philosopher* philosopher )