我正在尝试建立一个并发计数器程序,当线程增加时,执行时间也会增加

问题描述

#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 (将#修改为@)