Lua中的线程和状态

线程(thread)作为Lua中一种基本的数据类型,它代表独立的执行线程(independent threads of execution),线程类型是实现协程(coroutines)的基础。本文将介绍Lua虚拟中的全局状态和线程的关系,以及从源码角度来看其数据结构。

2015-05-30 20:19:10

阅读数 8290

评论数 0

Lua中Userdata类型源码实现

1、概述     Lua中userdata分两种,一种是轻量级userdata(light userdata),轻量级userdata是一种表示C指针的值,对Lua虚拟机来说,这种数据类型不需要GC(垃圾回收),其指向的内存由用户分配和释放,其实现就是一个void *p指针;后一种userdat...

2015-04-15 19:22:53

阅读数 3369

评论数 0

Lua中table类型的源码实现

1、概述 table是lua中唯一的表示数据结构的工具。它可以用于实现数据容器、函数环境(Env)、元表(metatable)、模块(module)和注册表(registery)等其他各种用途。因此了解table的实现是非常有必要的,根据《Lua中数据类型的源码实现》中知道,在Lua中,table...

2015-04-14 20:25:37

阅读数 3907

评论数 0

Lua中编译执行代码相关的函数以及机制

可以说Lua之所以称为是一种解释型的语言,正是因为有诸如load这样的函数,因为这样的函数使得Lua可以执行动态生成的代码。下面具体来分析这些函数。 load函数 load函数原型如下: load (chunk [, chunkname [, mode [, env]]]) 该函数加载一个chun...

2015-04-09 19:15:40

阅读数 1823

评论数 0

浅析线程间通信三:Barriers、信号量(semaphores)以及各种同步方法比较

之前的文章讨论了互斥量、条件变量、读写锁和自旋锁用于线程的同步,本文将首先讨论Barriers和信号量的使用,并给出了相应的代码和注意事项,相关代码也可在我的github上下载,然后对线程各种同步方法进行了比较。     Barriers     Barriers是一种不同于前面线程同步机...

2015-04-02 21:03:15

阅读数 2619

评论数 0

Lua中字符串类型的源码实现

概述     Lua完全采用8位编码,Lua字符串中的字符可以具有任何数值编码,包括数值0。也就是说,可以将任意二进制数据存储到一个字符串中。Lua的字符串是不可变的值(immutable values)。如果修改,实质上是新建一个字符串。根据《Lua中数据类型的源码实现》中知道,在Lua中,字...

2015-03-31 21:57:47

阅读数 2499

评论数 0

Lua中数据类型的源码实现

概述     在Lua中有8种基础类型:nil、boolean、number、string、userdata、function、thread和table。可以使用函数type查看某个变量或值的类型,返回相应的类型名称。像其他动态语言一样,在语言中没有类型定义的语法,每个值都携带了它自身的类型信息。...

2015-03-30 19:36:45

阅读数 2221

评论数 0

Lua中的模块以及实现方法

从使用的角度来看,一个模块就是一个程序库,可以通过Lua自身提供的require来加载。然后便得到一个全局变量,表示一个table。这个table就是像一个名字空间,其内容就是模块导出的所有东西,例如函数和常量。简单的说,Lua中的模块就是一个table,table中可以包括任何东西。本文首先详细...

2015-03-29 16:12:39

阅读数 4530

评论数 0

Lua中类的实现

概述      一个类就是像是一个创建对象的模具,对于Lua这种没有类的概念的语言,为了模拟类,方法是为要创建的对象制定一个原型(prototype)。这个原型相当于其他语言中的类。但是原型同时也是一种常规的对象,当其他的对象(看成是原型的实例)遇到一个未知的操作时,就会去原型中查找。因此,在L...

2015-03-28 20:49:26

阅读数 1444

评论数 0

深入理解Lua的闭包一:概念、应用和实现原理

本文首先通过的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理。 闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范...

2015-03-15 20:25:28

阅读数 18164

评论数 4

浅析线程间通信二:读写锁和自旋锁

上文讨论了互斥量和条件变量用于线程的同步,本文将讨论读写锁和自旋锁的使用,并给出了相应的代码和注意事项,相关代码也可在我的github上下载。  读写锁  对于互斥量要么是锁住状态要么是不加锁锁状态,而且一次只有一个线程可以对其加锁,而读写锁对线程的读数据加锁请求和写数据加锁请求进行了区分,从而在...

2015-02-25 16:37:29

阅读数 1833

评论数 0

浅析线程间通信一:互斥量和条件变量

线程同步的目的简单来讲就是保证数据的一致性。在Linux中,常用的线程同步方法有互斥量( mutex )、读写锁和条件变量,合理使用这三种方法可以保证数据的一致性,本文将讨论互斥量和条件变量的使用,并给出了相应的代码和注意事项。

2015-01-03 19:57:00

阅读数 2959

评论数 0

浅析Linux线程调度

在Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元。Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。...

2014-12-20 13:47:22

阅读数 11380

评论数 0

浅析Linux线程中数据

本文首先概述了线程中有哪些数据私有的,以及进程中哪些数据是线程共享的,然后详细分析了线程在用户空间中的数据,最后通过一个多线程程序来分析线程中的数据分布。

2014-12-03 20:42:23

阅读数 1834

评论数 0

浅析Linux线程的创建

本文首先使用了接口pthread_create创建一个线程,并用strace命令追踪了接口pthread_create创建线程的步骤以及涉及到的系统调用,然后讨论了Linux中线程与进程关系,最后概述了为了实现POSIX线程,Linux内核所做的修改。   使用pthread_create创建线...

2014-11-24 19:15:09

阅读数 2562

评论数 0

浅析C++绑定到Lua的方法

虽然将C++对象绑定到Lua已经有tolua++、LuaBridge和luabind等各种库可以直接使用,但弄清楚C++对象绑定到Lua的常见方法,不但有助于更深的了解Lua的机制,还可以方便修改第三方库以满足实际项目需求。本文通过分析第三方库Lunar的实现,来理解C++对象绑定到Lua的通常方...

2014-11-06 19:52:49

阅读数 3574

评论数 1

浅析HTTP中POST和GET区别并用Python模拟其响应和请求

最近在几周在做手游崩溃信息收集和上传,拿到崩溃信息后,使用的是HTTP的POST方法上传到公司共用的服务器的,因此做简单总结如下。本文首先简单介绍了HTTP协议,主要说明了POST方法和GET方法的区别;然后用Python实现了 对POST方法和GET方法的响应;最后用Python模拟了POST方...

2014-09-25 20:05:53

阅读数 10320

评论数 0

Cocos2d-x程序在Android下的启动过程

本文通过分析cocos2d-x自身提供的示例程序HelloLua来分析cocos2d-x程序在android平台下的具体启动过程。

2014-09-21 09:06:57

阅读数 6219

评论数 0

使用gcc时头文件路径和动态链接库路径

在使用gcc编译连接生成可执行文件时,经常会碰到变量未定义、链接时或者运行可执行文件时找不到相应的动态库等问题,本文首先介绍了gcc在编译时头文件路径相关选项以及搜索路径顺序,然后讨论了编译成可执行文件时动态库的搜索路径顺序,最后说明了生成可执行文件后,运行文件时动态库的搜索路径顺序。搞清楚这三个...

2014-08-14 16:36:38

阅读数 9590

评论数 0

gcc的使用

gcc是Linux下常用的C/C++编译驱动器。本文首先介绍了gcc整个编译连接过程,然后讨论gcc常用的选项,最后说明了gcc与g++的关系。

2014-08-11 16:58:02

阅读数 1954

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭