#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; }解决方法 这是测试实现的相对简单的选项,这不是唯一的现有选项.
>创建一个将X项添加到列表中的函数(可以是常规计数器)>创建一个在循环中检索相同数据的函数.>创建几个线程(pthread_create)并分配给每个函数.>通过这种方式,您可以看到是否没有dedlock,为了检查正确性,您应该在插入期间添加某种类型的时间戳(您需要插入一个用时间戳填充的值),为每个线程保留一些数组来保存结果,最后打印您的结果,看看时间戳是否保持正确性.
总结以上是内存溢出为你收集整理的如何在c中测试线程安全的实现?全部内容,希望文章能够帮你解决如何在c中测试线程安全的实现?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)