首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程安全-使二进制搜索树线程安全

线程安全-使二进制搜索树线程安全
EN

Stack Overflow用户
提问于 2021-04-17 12:24:59
回答 1查看 570关注 0票数 0

我对C语言编程很陌生,也对线程也很陌生。

我正在为二进制搜索树创建函数,如Insert、Search & Delete。但是我被指定让这些函数线程安全。

因此,我的问题是如何使这些函数线程安全,我需要做什么?还有关于线程的一般建议吗?

举个例子:我已经开始使用搜索函数了,但是如何保证线程的安全呢?为了使这些线程安全,您可以做一些简单的普通事情吗?

代码语言:javascript
复制
int search (node* root, int number)
{
    if(root==NULL)
      return 0;
    else if(number==root->data)
      return 1;
    else if(number<=root->data)
      return search(root->left,number);
    else 
      return search(root->right,number);
}

我在用POSIX。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-17 13:02:45

有几种方法可以使程序线程安全,尽管C标准中的线程库用于线程同步和简单的互斥机制,但更复杂的特性通常依赖于操作系统及其库、Win API、POSIX等。

你应该从一个简单的互斥开始。在你的特殊情况下,所有考虑的事情都可能是最好的方法。

使用POSIX,可以声明并初始化启动和同步线程的互斥体:

代码语言:javascript
复制
pthread_mutex_t lock;

if (pthread_mutex_init(&lock, NULL) != 0) {
    puts("Unable to create mutex!");
    return EXIT_FAILURE;
}

并将其作为指针传递到线程参数结构中。

在您使用pthread_mutex_lock(&lock)pthread_mutex_unlock(&lock)保护关键部分的线程中,即是代码中发生数据竞争的部分,而不是更少,只对访问或修改共享数据的位置进行,特别注意死锁。

我假设您知道如何创建和同步线程,如果不是这里,您将有一个关于如何实现线程的教程(它还可以使用互斥):

https://www.cs.cmu.edu/afs/cs/academic/class/15492-f07/www/pthreads.html

互斥是最简单的并发冲突解决机制之一,作为优格涅佩雷斯,可以使用C标准特性使用上述<threads.h>库向程序提供更多的可移植性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67138144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档