1.互斥锁 在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。1.1锁的创建 互斥锁可以动态或静态的被创建,可以用宏PTHREAD_MUTEX_INITIALIZER来静态的初始化锁,采用这种方式比较容易理解,互斥锁是pthread_mutex_t的结构体,而这个宏是一个结构常量,如下可以完成静态的初始化锁: pthread_mutex_t mutex =PTHREA
转载 2024-03-16 09:59:04
91阅读
一个程序问题 之前写过这样一个C程序:模块维护一个工作线程、提供一组调用接口(分同步调用和异步调用)。用户调用模块提供的接口后,会向工作队列添加一个任务。然后任务由工作线程来处理。在同步调用情况下,接口调用后调用者被阻塞,等待工作线程处理完成后,将调用者唤醒。伪代码如下: [调用接口] add_command(cmd, pid); /* 1 */ raise(SIGSTOP); /* 2 */
转载 2024-05-27 16:30:01
56阅读
文章目录线程创建例子另一个例子 线程创建在传统Unix进程模型中,每个进程只有一个控制线程。在POSIX线程(pthread)的情况下,程序开始运行时,它也是以单进程中的单个控制线程启动的。在创建多个控制线程以前,程序的行为与传统的进程并没有什么区别。新增的线程可以通过调用pthread_create函数创建。#include <pthread.h> int pthread_cre
转载 2024-04-13 23:30:58
58阅读
1、coroutine运行一系列的协作多线程。每个coroutine相当于一个thread。通过yield-resume实现在不同thread之间切换控制权。但是,跟常规的多线程不同,coroutine是非抢占式的。一个coroutine在运行的时候,不可能被其他的coroutine从外部将其挂起,只有由其本身显式地调用yield才会挂起,并交出控制权。对
转载 2024-03-17 12:14:04
99阅读
        工作队列(work queue)是Linux内核中将操作延期执行的一种机制。因为它们是通过守护进程在用户上下文执行,函数可以睡眠的时间,与内核是无关的。在内核版本2.5开发期间,设计了工作队列,用以替换此前的keventd机制。        这种机制和BH或Tasklets不同之处在于工作队
转载 2024-03-25 10:43:17
103阅读
1.协同程序Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。1.1 线程和协同程序区别线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只有在明确的被要求挂起的时候才会被挂起。
转载 2024-04-23 16:55:52
104阅读
Linux-Lua高级教学Lua 协同程序什么是协同?Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同是非常强大的功能,但是用起来也很复杂。线程和协同程序区别线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任一指定时刻只有一个协同程
转载 2024-05-11 11:46:21
41阅读
Lua 协同程序(coroutine)什么是协同(coroutine)?      Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同是非常强大的功能,但是用起来也很复杂。线程和协同程序区别一个具有多个线程的程序可以同时运行几个线程
转载 2024-05-29 20:01:03
54阅读
Lua 中多线程用法 for Win32Exts            目前 Lua 中并没有 真正的抢占式 thread 的概念,只有一个类似的协程:coroutine 对象,同一时间只能运行一个 coroutine ,并且需要显式的进行切换才能执行。与实际应用需求相差甚远。(coroutine 用法参见:
转载 2024-03-06 15:14:31
100阅读
源码中7大参数位置:七大参数: 拒绝请求执行的runnable的策略。理解图:1. corePoolSize线程池中的常驻核心线程数3. keepAliveTime多余的线程存活核心线程满了,阻塞队列也满了,才会开启max最大线程数,如果还是满了,就会启动拒绝策略。如果流量降下来,就按照设置的时间最大数,慢慢的回到了核心线程数。原理:注意:阿里巴巴规范拒绝策略:public class Threa
转载 2024-09-03 06:43:26
50阅读
本人表达能力有限,所以文字描述不太清晰,我更习惯自己默默地造轮子,所以我只能尽力保证我给轮子可以被直接使用。虽然不太会说,但有一些前提还是必要讲一下的:直观的讲:lua并不支持多线程,任何尝试用lua做并发方案的人,都有病,没错,我自己也是。lua有并发需求本身就是一件很鬼扯的事,本身会有这种需求,就说明可能在项目架构的大方向上,存在了问题。我认为对于C/C++程序员来说,我们看中lua的地方是,
转载 2024-03-01 12:43:14
211阅读
     协同程序与线程thread差不多,也就是一条执行序列,拥有自己独立的栈、局部变量和命令指针,同时又与其他协同程序共享全局变量和其他大部分东西。从概念上讲线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。也就是说多个协同程序在任意时刻只能运行一个协同程序,只有当正在运行的协同程序显式的要求挂起时,它的执行
转载 2024-04-25 17:45:41
34阅读
最近写paintsnow::start时出现了一个非常麻烦的BUG,程序的Release版本大约每运行十几次就会有一次启动时崩溃(Debug版本还没崩溃过),崩溃点也不固定。经过简单分析之后,确定是线程同步的问题。于是便修改了线程通信的代码,并使用pthread_mutex_lock/unlock来防止冲突。重新编译后,崩溃频率有所减少。但是每运行约四十次,还是免不了崩溃一次,而且冷启动时崩溃
转载 2024-04-03 15:25:42
88阅读
lua本身是不支持真正的多线程的,但是lua提供了相应的机制来实现多线程lua执行在一个lua环境中内部叫lua_State。如果我们创建多个lua_State,并且创建一一对应的线程来启动它就基本实现了一个封闭的多线程环境。但是这种环境下lua代码之间没有任何联系,不能共享数据,不能进行同步。因此我们需要建立一套共享数据与同步的机制来。thread.new("test_thread") --
最近我们在开发引擎时遇到一个和操作系统有关的问题,想了个巧妙地方法解决。我感觉挺有意思,值得记录一下。在 ios 上,如果你的程序没能即使处理系统发过来的消息(比如触摸消息等),系统有机会判定你的程序出了问题,可能主动把进程杀掉。 完全自己编写的应用程序,固然可以把处理消息循环放在最高优先级。即使有大量耗时操作,也可以通过合理的安排代码,不让消息处理延后。但作为引擎,很难
Lua所支持的协程全称被称作协同式多线程(collaborative multithreading)。Lua为每个coroutine提供一个独立的运行线路。然而和多线程不同的地方就是,coroutine只有在显式调用yield函数后才被挂起,同一时间内只有一个协程正在运行。Lua将它的协程函数都放进了coroutine这个表里,其中主要的函数如下摘取一段云风的代码来详尽解释协程的工作机制,在这段代
转载 2024-05-11 08:18:25
159阅读
lua学习】Lua 协同程序(coroutine)什么是协同(coroutine)?Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同是非常强大的功能,但是用起来也很复杂。线程和协同程序区别线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运
协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行,是抢占式的,而协程是由每个线程自己决定自己什么时候不执行,并把执行权主动交给下一个线程。 协程是用户空间线程,操作系统其存在一无所知,所以需要用户自己去做调度,用来执行协作式多任务非常合适。 多线程程序同时运行多个线程;而协同程序是通过协作来完成,在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起。这
转载 2024-05-10 21:32:05
69阅读
lua本身是不支持真正的多线程的,但是lua提供了相应的机制来实现多线程lua执行在一个lua环境中内部叫lua_State。如果我们创建多个lua_State,并且创建一一对应的线程来启动它就基本实现了一个封闭的多线程环境。但是这种环境下lua代码之间没有任何联系,不能共享数据,不能进行同步。因此我们需要建立一套共享数据与同步的机制来。thread.new("test_thread") --
转载 2024-07-03 23:05:01
69阅读
前言本文主要讲解 lua 协程的基本使用,和它在 skynet 这个框架中的实际应用。skynet简介可能有的读者学 lua 不是做游戏服务器的,没有了解过 skynet,简单介绍下,skynet 是 云风 大神开发的开源服务器引擎,应用于当下众多的游戏公司的服务器框架。lua协程是什么从多线程(multithreading)的角度看,协程(coroutine)与线程(thread)类似:协程是一
转载 2024-05-05 17:58:28
63阅读
  • 1
  • 2
  • 3
  • 4
  • 5