问题描述
#include <pthread.h>
#include <stdlib.h>
#include <stdint.h>
#include <ck_pr.h>
struct counter_handle {
uint64_t value;
struct counter_handle *next;
};
struct counter {
struct counter_handle *counters;
pthread_mutex_t mutex;
};
struct counter *
counter_create(void)
{
struct counter *r = calloc(sizeof *r,1);
if (pthread_mutex_init(&r->mutex,NULL) != 0)
goto fail;
return r;
fail:
free(r);
return NULL;
}
void
counter_inc(struct counter_handle *counter)
{
ck_pr_store_64(&counter->value,counter->value + 1);
return;
}
unsigned long
counter_read(struct counter *counter)
{
uint64_t sum = 0;
for (struct counter_handle *cursor = counter->counters;
cursor != NULL;
cursor = cursor->next) {
sum += ck_pr_load_64(&cursor->value);
}
return (unsigned long)sum;
}
struct counter_handle *
counter_handle_create(struct counter *counter)
{
struct counter_handle *r = calloc(sizeof(*r),1);
pthread_mutex_lock(&counter->mutex);
r->next = counter->counters;
counter->counters = r;
pthread_mutex_unlock(&counter->mutex);
}
这是我的代码。当我尝试编译它时,它正在编译,但是当我运行基准测试程序时,这给了我分段错误。我不确定代码到底有什么问题。当我编译时,执行时间应该随着线程数量的增加而增加。有人请帮我。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)