gpt4 book ai didi

c - 如何在 c 中测试线程安全的实现?

转载 作者:太空狗 更新时间:2023-10-29 15:41:07 25 4
gpt4 key购买 nike

我有一个线程安全的程序,我想对其进行测试(见下文)。我不确定如何开始测试程序,因为这将是我的第一个测试程序。结果应该是使用此线程安全程序实现的演示,以及为什么它是测试线程安全程序(如示例)的最佳选择。

#include <errno.h>
#include <pthread.h>
static pthread_mutex_t listlock = PTHREAD_MUTEX_INITIALIZER;

int accessdata_r(void) { /* return nonnegative traversal key if successful */
int error;
int key;
if (error = pthread_mutex_lock(&listlock)) { /* no mutex, give up */
errno = error;
return -1;
}
key = accessdata();
if (key == -1) {
error = errno;
pthread_mutex_unlock(&listlock);
errno = error;
return -1;
}
if (error = pthread_mutex_unlock(&listlock)) {
errno = error;
return -1;
}
return key;
}

int adddata_r(data_t data) { /* allocate a node on list to hold data */
int error;
if (error = pthread_mutex_lock(&listlock)) { /* no mutex, give up */
errno = error;
return -1;
}
if (adddata(data) == -1) {
error = errno;
pthread_mutex_unlock(&listlock);
errno = error;
return -1;
}
if (error = pthread_mutex_unlock(&listlock)) {
errno = error;
return -1;
}
return 0;
}

int getdata_r(int key, data_t *datap) { /* retrieve node by key */
int error;
if (error = pthread_mutex_lock(&listlock)) { /* no mutex, give up */
errno = error;
return -1;
}
if (getdata(key, datap) == -1) {
error = errno;
pthread_mutex_unlock(&listlock);
errno = error;
return -1;
}
if (error = pthread_mutex_unlock(&listlock)) {
errno = error;
return -1;
}
return 0;
}

int freekey_r(int key) { /* free the key */
int error;
if (error = pthread_mutex_lock(&listlock)) { /* no mutex, give up */
errno = error;
return -1;
}
if (freekey(key) == -1) {
error = errno;
pthread_mutex_unlock(&listlock);
errno = error;
return -1;
}
if (error = pthread_mutex_unlock(&listlock)) {
errno = error;
return -1;
}
return 0;
}

最佳答案

这是一个相对简单的选项来测试您的实现,这不是唯一的现有选项。

  1. 创建一个将 X 项添加到列表的函数(它可以是常规计数器)
  2. 创建一个在循环中检索相同数据的函数。

  3. 创建几个线程 (pthread_create) 并分配给每个函数。

  4. 通过这种方式您可以查看是否没有锁死,为了检查正确性,您应该在插入期间添加某种类型的时间戳(您需要插入一个带有时间戳的值),为每个线程保存一些数组,这将保留结果,最后打印结果并查看时间戳是否保持正确性。

关于c - 如何在 c 中测试线程安全的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com