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

做网站的要花多少钱广东个人 网站备案

做网站的要花多少钱,广东个人 网站备案,推广营销软件,做海外网站的公司基于CAS线程加锁方式 CAS#xff08;Compare-And-Swap#xff09;和 mutex 都是用于实现线程安全的技术#xff0c;但它们适用于不同的场景#xff0c;具有不同的性能和复杂性。下面是对两者的区别和使用场景的详细解释#xff1a; CAS#xff08;Compare-And-SwapCompare-And-Swap和 mutex 都是用于实现线程安全的技术但它们适用于不同的场景具有不同的性能和复杂性。下面是对两者的区别和使用场景的详细解释 CASCompare-And-Swap 工作原理 CAS 是一种无锁lock-free的同步机制通过原子操作来比较和交换变量的值。它的核心思想是只有当变量的当前值等于预期值时才将其更新为新值否则重新尝试。这个操作通常在硬件级别支持以确保其原子性。 优点 高性能由于没有锁的开销CAS 通常比互斥锁更快尤其是在争用较少的情况下。无锁编程CAS 允许多线程环境下的无锁编程避免了死锁问题。可扩展性在高并发场景下CAS 能提供更好的可扩展性因为它减少了线程间的竞争。 缺点 复杂性编写无锁代码更复杂容易出错特别是在处理复杂数据结构时。ABA问题CAS 操作可能会受到 ABA 问题的影响即一个值被修改成另一个值后又变回原值导致 CAS 操作误认为值没有变化。不适合长时间操作如果需要进行长时间操作CAS 可能不适用因为在高争用情况下CAS 可能会反复失败导致性能下降。 使用场景 短小且频繁的操作适用于操作简短且需要高频率执行的场景如计数器、指针交换等。高并发环境适用于高并发但低争用的场景如无锁队列、栈等数据结构。 mutex互斥锁 工作原理 mutex 是一种基于锁的同步机制用于保护临界区确保同一时间只有一个线程可以访问共享资源。线程在进入临界区前必须获取锁离开时释放锁。 优点 易于理解和使用mutex 的使用方式相对简单易于理解和实现。适用广泛适用于需要保护临界区的各种场景包括长时间的复杂操作。解决复杂同步问题对于复杂的共享资源访问mutex 提供了可靠的解决方案。 缺点 性能开销获取和释放锁的操作有一定的性能开销尤其是在高并发环境下。死锁风险如果使用不当可能会导致死锁即两个或多个线程互相等待对方释放锁。上下文切换开销在高争用情况下线程可能频繁阻塞和唤醒导致上下文切换开销。 使用场景 复杂操作和长时间操作适用于需要长时间保护的临界区操作特别是复杂的共享数据结构修改。低到中等并发环境适用于并发度不高的环境或者即使在高并发环境中也能有效管理临界区的访问。简单同步需求对于简单的同步需求如单个资源的访问控制mutex 是一个可靠的选择。 总结 CAS适用于短小、频繁且简单的操作特别是在高并发但低争用的场景中能提供更好的性能和可扩展性但编写无锁代码更复杂。mutex适用于长时间、复杂的操作以及需要可靠保护的临界区易于理解和使用但在高并发环境下性能可能不如无锁方案。 示例 #include iostream #include thread #include atomicstd::atomicint num(0); // 使用std::atomic定义一个原子整数void increment() {for (int i 0; i 1000; i) {int expected num.load();while (!num.compare_exchange_weak(expected, expected 1)) {// 如果CAS失败expected会被更新为当前的值继续尝试}} }int main() {std::thread t1(increment);std::thread t2(increment);t1.join();t2.join();std::cout Final value of num: num std::endl;return 0; }条件变量std::condition_variable 条件变量的工作原理 线程等待 (wait) 当线程调用 wait 方法时它会自动释放与条件变量相关联的互斥锁并进入等待状态。线程在等待期间会阻塞直到被其他线程通知。重要的是wait 方法会确保线程在被唤醒时会重新获得互斥锁这样它可以安全地检查和更新条件。 线程通知 (notify_all 或 notify_one) 当某个线程改变了共享状态即更新了条件后它会调用 notify_all 或 notify_one 方法来通知其他线程。notify_all 会唤醒所有在条件变量上等待的线程而 notify_one 只会唤醒一个线程如果有多个线程等待。 来控制多个线程的执行顺序。以下是一个示例代码实现了四个线程按照指定顺序2 - 1 - 4 - 3循环执行 #include iostream #include thread #include mutex #include condition_variable #include vector #include algorithmstd::mutex mtx; std::condition_variable cv; int current_thread 2; // 初始线程编号 const std::vectorint order {2, 1, 4, 3}; // 执行顺序 const int num_iterations 10; // 每个线程执行的循环次数void thread_function(int thread_id) {for (int i 0; i num_iterations; i) {std::unique_lockstd::mutex lock(mtx);cv.wait(lock, [thread_id]() { return current_thread thread_id; });// 执行线程的任务std::cout Thread thread_id is executing\n;// 更新当前线程编号auto it std::find(order.begin(), order.end(), thread_id);if (it ! order.end() it ! order.end()) {current_thread *it;} else {current_thread order[0];}// 唤醒所有等待线程cv.notify_all();} }int main() {std::vectorstd::thread threads;// 创建四个线程for (int i 1; i 4; i) {threads.emplace_back(thread_function, i);}// 等待所有线程完成for (auto t : threads) {t.join();}return 0; }notify_all 和 notify_one 的区别 notify_all: 功能唤醒所有在条件变量上等待的线程。使用场景当条件变化时你希望所有等待的线程都能被唤醒并检查条件。例如当一个共享资源的状态发生变化并且所有等待的线程都需要重新检查状态时使用 notify_all 是合适的。缺点如果有大量线程等待并且每次通知都会唤醒所有线程可能会导致性能问题因为所有线程都会被唤醒并重新竞争锁。 notify_one: 功能唤醒一个在条件变量上等待的线程。如果有多个线程等待哪个线程被唤醒是不确定的。使用场景当条件变化时只需要唤醒一个线程进行处理其他线程可以继续等待。例如当有线程处理某个任务时你可能只需要唤醒一个线程来处理它并且其他线程可以继续等待。优点比 notify_all 更高效特别是在只需唤醒一个线程的情况下减少了不必要的线程唤醒和锁竞争。 多线程编程中怎么唤醒指定的线程 在多线程编程中标准的 C 条件变量 (std::condition_variable) 并不提供直接指定唤醒哪个特定线程的功能。std::condition_variable 提供的 notify_one() 和 notify_all() 方法仅仅是唤醒一个或所有等待线程并不支持精确指定具体的线程。要实现更细粒度的线程控制你需要采用其他方法。以下是一些常见的方法来间接实现唤醒特定线程的需求 1. 线程标识符与条件变量 你可以使用标识符或某种标志来控制哪个线程应该继续执行。这种方法不直接唤醒特定线程但通过条件变量和额外的状态管理来实现间接的控制。 #include iostream #include thread #include mutex #include condition_variable #include vectorstd::mutex mtx; std::condition_variable cv; bool ready[4] {false, false, false, false}; // 每个线程的准备状态void worker(int id) {std::unique_lockstd::mutex lock(mtx);cv.wait(lock, [id]{ return ready[id]; }); // 等待特定条件std::cout Worker id is processing\n; }void set_ready(int id) {std::lock_guardstd::mutex lock(mtx);ready[id] true;cv.notify_all(); // 或 notify_one()具体取决于你的需求 }int main() {std::vectorstd::thread threads;for (int i 0; i 4; i) {threads.emplace_back(worker, i);}std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟准备时间// 唤醒特定的线程set_ready(2); // 只唤醒 id 为 2 的线程for (auto t : threads) {t.join();}return 0; }2. 使用 std::promise 和 std::future std::promise 和 std::future 提供了另一种方式来管理线程间的同步并可以用于将结果传递给特定线程。 #include iostream #include thread #include future #include vectorstd::vectorstd::promisevoid promises(4); std::vectorstd::futurevoid futures;void worker(int id) {futures[id].wait(); // 等待对应的 promise 被设置std::cout Worker id is processing\n; }int main() {for (int i 0; i 4; i) {futures.push_back(promises[i].get_future());std::thread(worker, i).detach();}std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟准备时间// 唤醒特定的线程promises[2].set_value(); // 唤醒 id 为 2 的线程std::this_thread::sleep_for(std::chrono::seconds(1)); // 给线程时间完成任务return 0; }
文章转载自:
http://www.morning.srtw.cn.gov.cn.srtw.cn
http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn
http://www.morning.sgbk.cn.gov.cn.sgbk.cn
http://www.morning.pwksz.cn.gov.cn.pwksz.cn
http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn
http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn
http://www.morning.pcshb.cn.gov.cn.pcshb.cn
http://www.morning.rkbly.cn.gov.cn.rkbly.cn
http://www.morning.pgggs.cn.gov.cn.pgggs.cn
http://www.morning.gidmag.com.gov.cn.gidmag.com
http://www.morning.lhrcr.cn.gov.cn.lhrcr.cn
http://www.morning.smqjl.cn.gov.cn.smqjl.cn
http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn
http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn
http://www.morning.bxqpl.cn.gov.cn.bxqpl.cn
http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn
http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn
http://www.morning.mflqd.cn.gov.cn.mflqd.cn
http://www.morning.fypgl.cn.gov.cn.fypgl.cn
http://www.morning.gccdr.cn.gov.cn.gccdr.cn
http://www.morning.ntgjm.cn.gov.cn.ntgjm.cn
http://www.morning.hjwkq.cn.gov.cn.hjwkq.cn
http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn
http://www.morning.zkdmk.cn.gov.cn.zkdmk.cn
http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn
http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn
http://www.morning.irqlul.cn.gov.cn.irqlul.cn
http://www.morning.kfrhh.cn.gov.cn.kfrhh.cn
http://www.morning.xqbbc.cn.gov.cn.xqbbc.cn
http://www.morning.ysskn.cn.gov.cn.ysskn.cn
http://www.morning.bxczt.cn.gov.cn.bxczt.cn
http://www.morning.8yitong.com.gov.cn.8yitong.com
http://www.morning.sqqdy.cn.gov.cn.sqqdy.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.morning.lsxabc.com.gov.cn.lsxabc.com
http://www.morning.nkjxn.cn.gov.cn.nkjxn.cn
http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn
http://www.morning.mpyry.cn.gov.cn.mpyry.cn
http://www.morning.hknk.cn.gov.cn.hknk.cn
http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn
http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn
http://www.morning.rycbz.cn.gov.cn.rycbz.cn
http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn
http://www.morning.jxzfg.cn.gov.cn.jxzfg.cn
http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn
http://www.morning.mqbdb.cn.gov.cn.mqbdb.cn
http://www.morning.wlstn.cn.gov.cn.wlstn.cn
http://www.morning.qxmys.cn.gov.cn.qxmys.cn
http://www.morning.fktlr.cn.gov.cn.fktlr.cn
http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn
http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn
http://www.morning.gzzxlp.com.gov.cn.gzzxlp.com
http://www.morning.bpp999.com.gov.cn.bpp999.com
http://www.morning.xdhcr.cn.gov.cn.xdhcr.cn
http://www.morning.zbkdm.cn.gov.cn.zbkdm.cn
http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn
http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn
http://www.morning.mrgby.cn.gov.cn.mrgby.cn
http://www.morning.smzr.cn.gov.cn.smzr.cn
http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn
http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn
http://www.morning.zylzk.cn.gov.cn.zylzk.cn
http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn
http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn
http://www.morning.nfpkx.cn.gov.cn.nfpkx.cn
http://www.morning.hprmg.cn.gov.cn.hprmg.cn
http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn
http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn
http://www.morning.knnhd.cn.gov.cn.knnhd.cn
http://www.morning.jwwfk.cn.gov.cn.jwwfk.cn
http://www.morning.yrngx.cn.gov.cn.yrngx.cn
http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn
http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn
http://www.morning.hfrbt.cn.gov.cn.hfrbt.cn
http://www.morning.pfbx.cn.gov.cn.pfbx.cn
http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn
http://www.morning.txgjx.cn.gov.cn.txgjx.cn
http://www.morning.gnhsg.cn.gov.cn.gnhsg.cn
http://www.morning.lzbut.cn.gov.cn.lzbut.cn
http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn
http://www.tj-hxxt.cn/news/268756.html

相关文章:

  • 爱用建站官网网址关键词查询网站
  • 网上学习做网站官方网站优化价格
  • 竹子建站免费版去设计公司还是去企业
  • 更新网站内容怎么做seo网站推广
  • 东莞网站建设公司注册高端网站建设公司哪家好
  • 怎么创建免费的网站多语言网站建设 技术
  • 必须做网站等级保护做兼职推荐网站
  • html5 手机端网站什么网站专门学做湖北菜
  • 肇庆网站制作案例icp备案是什么意思
  • 陶瓷网站建设网站诊断案例
  • 唐山路南网站建设山东公司网页定制
  • 做网页设计卖钱的网站怎样在百度上发布作品
  • 网站域名多少钱免费查询个人征信
  • 贵阳市住房和城乡建设局政务网站哪里有免费建设网站
  • 网站开发的基础知识智慧团手机网上登录入口
  • 微信的微网站是什么wordpress主题The7
  • 小学生做网站软件恩施网站建设模板
  • 山东省建设教育集团网站成都购房登记入口官网
  • 深圳网站制作哪家好薇专业做网站平台
  • 招标网站哪个好用久久网招聘信息
  • 网站开发和app开发哪个难青岛建设集团
  • 商丘做网站用什么程序比较好WordPress播放h265
  • 体检中心 网站建设方案哪个视频网站做视频赚钱的
  • 义乌市评建设职称网站网站建设常熟
  • 家政服务网站模板如何做公司网站的
  • 湖南网站建设 干净磐石网络python和php做网站
  • 共享vps可以做网站吗铁岭网站建设
  • 北京工地网站建设新云网站模版
  • 做巧克力的网站做中小型网站最好的架构
  • 网站建设管理制度九不准英雄联盟网页设计代码