获取错误错误:'pthread_mutex_t'没有名为'wait'的成员,因为此代码无法理解原因?我已经在pthread_mutex_t mutex上声明了;仍然得到同样的错误。
我试图实现Semaphore书的小书中给出的两个阶段障碍。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <time.h>
int thread_count;
pthread_mutex_t mutex;
void* MyThread(void* rank);
void* Hello(void* rank)
{
long my_rank = (long) rank;
int a = 0,i;
for(i=0;i<10;i++)
{
int n = 5;
int count = 0;
mutex = Semaphore(1)
barrier = Semaphore(0)
a = a + 0.9*MAX_INT;
printf("this is %d iteration\n",i);
mutex.wait()
count = count + 1;
mutex.signal()
if count == n: barrier.signal() //unblock ONE thread
barrier.wait()
barrier.signal()
}
}
答案 0 :(得分:0)
pthreads
是一个C API,不是面向对象的。因此,库不会使用方法导出对象,而是将指针作为参数指向的函数。
您可以致电:
创建pthread_mutex_t
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
或将其初始化为PTHREAD_MUTEX_INITIALIZER
。
您可以通过以下方式获取互斥锁:
int pthread_mutex_lock(pthread_mutex_t *mutex);
并通过调用:
释放它int pthread_mutex_unlock(pthread_mutex_t *mutex);
在您的示例中,我不知道Semaphore
或barrier
指的是什么。
实际上,if
声明是正面的Pythonic。您是否试图将一些部分转换的Python代码推送到C编译器的喉咙?