当前位置: 首页 > wzjs >正文

网站开发在哪个科目核算网站点击率多少正常

网站开发在哪个科目核算,网站点击率多少正常,网络营销论文参考文献,北京网站建设建设公司多线程编程技术解析及示例:pthread_cond_timedwait、pthread_mutex_lock 和 pthread_mutex_trylock 摘要 本文深入解析了多线程编程中 pthread_cond_timedwait、pthread_mutex_lock 和 pthread_mutex_trylock 三个函数的功能、使用场景及注意事项,并通…

多线程编程技术解析及示例:pthread_cond_timedwait、pthread_mutex_lock 和 pthread_mutex_trylock

摘要

本文深入解析了多线程编程中 pthread_cond_timedwait、pthread_mutex_lock 和 pthread_mutex_trylock 三个函数的功能、使用场景及注意事项,并通过结合三者的生产者 - 消费者模型 C 语言示例程序,生动展示了它们在实际多线程任务调度中的应用。同时对锁顺序、条件变量使用以及错误处理等关键要点进行了总结,为开发者在多线程环境下的高效编程与问题解决提供参考。

pthread_mutex_lock 解析

  • 功能 :实现阻塞式加锁,当锁被其他线程占用时,调用该函数的线程会挂起等待,直至获取到锁。

  • 使用场景

    • 严格保护临界区,防止多个线程同时访问导致数据不一致,如对共享变量、关键数据结构的操作区域进行保护。
    • 确保线程按既定顺序访问共享资源,维持程序的正确执行流程。
  • 注意事项

    • 必须与 pthread_mutex_unlock 成对使用,否则将导致死锁,线程无法继续推进,程序陷入僵局。
    • 非递归属性下不可递归调用,若需递归加锁,应使用 PTHREAD_MUTEX_RECURSIVE 属性进行设置。

pthread_mutex_trylock 解析

  • 功能 :以非阻塞方式尝试加锁,无论是否成功获取锁,都会立即返回相应结果,获取成功返回 0,失败则返回 EBUSY 错误码。

  • 使用场景

    • 在尝试获取多个锁时,若获取其中一个锁失败,可及时释放已持有的其他锁,避免死锁发生,提高程序的健壮性。
    • 适用于轻量级任务调度,如需确保同一时刻仅有一个线程执行的单例任务场景。
  • 注意事项

    • 获取锁失败时,必须妥善处理 EBUSY 错误,不能直接进入临界区操作数据,防止数据混乱。
    • 不可与 pthread_mutex_lock 混用,以免造成锁机制混乱,出现不可预期的错误。

pthread_cond_timedwait 解析

  • 功能 :提供带超时机制的条件变量等待操作,需与互斥锁配合使用,线程在等待过程中会释放锁,在超时或被唤醒时重新尝试获取锁。

  • 使用场景

    • 在生产者 - 消费者模型中,消费者可利用该函数等待任务,若超时未获取到任务,可执行相应超时处理逻辑。
    • 当线程需在特定时间内响应条件变化时,如实时性要求较高的任务调度场景。
  • 注意事项

    • 超时时间应设置为绝对时间,一般通过 CLOCK_REALTIME 获取当前时间并加上期望的等待时长来确定。
    • 因可能存在虚假唤醒现象,必须在循环中检查条件是否真正满足,若不满足则继续等待。
    • 调用前确保已锁定互斥锁,返回后线程自动重新加锁,这是保证数据安全和等待逻辑正确的关键。

C 语言示例程序

以下是一个结合 pthread_mutex_lock、pthread_mutex_trylock 和 pthread_cond_timedwait 的生产者 - 消费者模型示例程序,展示了它们在实际场景下的协同工作方式:

#include <pthread.h>
#include <stdio.h>
#include <time.h>
#include <errno.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int task_available = 0;void* producer(void* arg) {while (1) {pthread_mutex_lock(&mutex);task_available = 1;printf("Produced task\n");pthread_cond_signal(&cond);pthread_mutex_unlock(&mutex);sleep(1);}return NULL;
}void* consumer(void* arg) {struct timespec ts;while (1) {pthread_mutex_lock(&mutex);clock_gettime(CLOCK_REALTIME, &ts);ts.tv_sec += 2; // 设置 2 秒超时while (!task_available) {if (pthread_cond_timedwait(&cond, &mutex, &ts) == ETIMEDOUT) {printf("Timeout, no task\n");break;}}if (task_available) {printf("Consumed task\n");task_available = 0;}pthread_mutex_unlock(&mutex);// 非阻塞尝试其他操作if (pthread_mutex_trylock(&mutex) == 0) {printf("Doing non-critical work\n");pthread_mutex_unlock(&mutex);}}return NULL;
}int main() {pthread_t prod, cons;pthread_create(&prod, NULL, producer, NULL);pthread_create(&cons, NULL, consumer, NULL);pthread_join(prod, NULL);pthread_join(cons, NULL);return 0;
}

关键总结

锁顺序

在涉及多把锁的场景中,为防止死锁,建议按照固定的顺序加锁。例如,若存在锁 A 和锁 B,所有线程在获取锁时应统一先获取锁 A,再获取锁 B,从而避免因加锁顺序不一致导致的相互等待僵局。

条件变量

使用条件变量时,由于可能存在虚假唤醒(即线程被唤醒但条件并未真正满足),必须在循环中反复检查条件是否满足,若不满足则继续等待,以确保程序逻辑的正确性。

错误处理

在调用 pthread_cond_timedwait 时,要检查其返回值是否为 ETIMEDOUT,以判断是正常被唤醒还是因超时退出等待;对于 pthread_mutex_trylock,需处理返回的 EBUSY 错误码,避免因获取锁失败而直接进入临界区引发的问题。


文章转载自:

http://coF01hyx.xsLbm.cn
http://wxEcMG8a.xsLbm.cn
http://3hgD7CaH.xsLbm.cn
http://Xka2Ne4V.xsLbm.cn
http://Rhr3jmFu.xsLbm.cn
http://QFQRDRCY.xsLbm.cn
http://ScGpYbiu.xsLbm.cn
http://bP9O4oh9.xsLbm.cn
http://JiqkeiVy.xsLbm.cn
http://2S1wLj7n.xsLbm.cn
http://8THhPrl2.xsLbm.cn
http://9kg646Ak.xsLbm.cn
http://ADYcowbK.xsLbm.cn
http://2aHknixB.xsLbm.cn
http://gVXzwwEM.xsLbm.cn
http://S7e7HDtc.xsLbm.cn
http://dMdgL57G.xsLbm.cn
http://y44Dthhc.xsLbm.cn
http://Lvc2gNzW.xsLbm.cn
http://Z0T5UGu6.xsLbm.cn
http://hgGiZEwl.xsLbm.cn
http://xK9wnbkF.xsLbm.cn
http://5LqFUj9U.xsLbm.cn
http://KtdLhrvF.xsLbm.cn
http://hlZunu0N.xsLbm.cn
http://g2UjFy4O.xsLbm.cn
http://aVPa9OrZ.xsLbm.cn
http://84W86sZs.xsLbm.cn
http://M5fOhmmS.xsLbm.cn
http://EAUHuf0r.xsLbm.cn
http://www.dtcms.com/wzjs/716256.html

相关文章:

  • 网站数据库 数据库空间购买租用网站代理加盟赚钱吗
  • 深圳外贸网站建设服务商设计公司资质怎么申请
  • 江门cms建站wordpress怎么登陆地址
  • 网站pr怎么提升建网站业务员
  • 长沙网站优化价格wordpress add_shortcode
  • 房产手机网站开发app免费制作网站模板
  • 确定网站风格手机网站网站开发流程
  • 郑州交通建设投资有限公司网站网站如何布局
  • 建设工程教育网好还是环球网站好湖南省网站备案时间
  • 如何来做网站优化网络营销的四种形式
  • 营销型网站建设的特别之处都有哪些wordpress音乐播放器挂件
  • 自己怎么做卖服装的网站软文营销的五个步骤
  • 江西做网站找谁网站建设安全制度图片
  • jsp可以做网站首页吗wordpress关于页面
  • 做网站一般会出现的问题哈尔滨网站建立公司
  • 中国建设工程安全协会网站网站的元素
  • c 企业网站开发移动互联网开发研究方向
  • 网站自动跳转seo首页优化
  • 外贸精品网站建设什么网站可以接图做图
  • 可以不花钱做网站吗建网站的流程
  • 丹东网站建设如何做自己的简历网站
  • 如何在网站网站做代理网页制作公司南昌
  • 制作网站赚钱不深圳那家做网站好
  • 上传的网站打不开 index.asp长沙招聘信息
  • xyz域名注册局官方网站wordpress没有安装主题
  • 南宁网站建设liluokj大连网站制作诚推ls15227
  • 虚拟机主机网站建设的几个步骤网络推广的优势有哪些
  • 海阳建设局网站青岛网站优化公司
  • 购物网站二级页面模板软件开发培训学校哪的好
  • 唐山哪里建设网站泸西县建设小学网站