spin

在Ubuntu内安装spin

六眼飞鱼酱① 提交于 2019-12-09 03:11:25
一、前期准备 系统采用了 Ubuntu 18.04.3 LTS 1、安装依赖 安装 C语言编译器: sudo apt install build-essential 2、安装 tcl和 tk:(可以在 http://www.tcl-lang.org/ 查询最新版本安装) sudo apt install tcl8.6 tk8.6 二、安装 spin 1、下载 spin( https://github.com/nimble-code/Spin ) 2019年 12月 9日,最新版本为 spin 6.5.2 2、解压 zip文件,得到 Spin-master文件夹 3、在文件夹内打开 shell,确认当前目录为 Spin-master文件夹 4、编译 spin: cd Src make 5、测试是否编译成功: ./Src/spin -V 如果输出 spin版本信息,则安装成功 6、将 spin放入 usr/bin sudo cp Src/spin /usr/bin/spin 7、在任意位置打开 shell,测试 spin能否使用: spin -V 如果输出 spin版本信息,则配置成功 三、使用 ispin ispin是 spin的一个图形程序 1、在 Spin-master文件夹内,打开 optional_GUI文件夹 2、在 option_GUI文件夹内打开 shell 3、运行:

spin_lock spin_lock_irq spin_lock_irqsave

我只是一个虾纸丫 提交于 2019-12-05 16:50:25
1,为啥需要自旋锁 很多时候我们并不能采用其他的锁,比如读写锁、互斥锁、信号量等。一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的、极短的临界区完全是一种性能损耗;另一方面在中断上下文是不允许睡眠的,除了自旋锁以外的其他任何形式的锁都有可能导致睡眠或者进程切换,这是违背了中断的设计初衷,会发生不可预知的错误。基于两点,我们需要自旋锁,他是不可替代的。 2,为啥自旋锁禁止抢占 这一点其实很好理解,当一个 CPU 获取到一把自旋锁之后,开始执行临界区代码,此时假设他的时间片运转完毕,进程调度会主动触发调度将其调走,执行另一个线程/进程,结果恰巧了这个线程/进程也需要用到该自旋锁,而上一个线程/进程还在停留在临界区内未释放锁,导致本进程无法获取到锁而形成死锁,所以自旋锁为了规避此类情形的出现从而直接禁止对已经开始运行的临界区设置禁止抢占标志。 3,为什么临界区禁止睡眠 如果自旋锁锁住以后进入睡眠,而此时又不能进行处理器抢占,内核的调取器无法调取其他进程获得该 CPU,从而导致该 CPU 被挂起;同时该进程也无法自唤醒且一直持有该自旋锁,进一步会导致其他使用该自旋锁的位置出现死锁。 4,spin_lock 系列的分别 每一种锁出现都有自己的原因,spin_lock 系列的锁就是为了解决这一个又一个的问题才会新增的各种自旋锁变种,这也符合现代计算机代码设计逻辑

[内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析【转】

a 夏天 提交于 2019-12-05 01:49:50
转自: https://www.cnblogs.com/x_wukong/p/8573602.html 转自;https://www.cnblogs.com/aaronLinux/p/5890924.html 自旋锁的初衷 :在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。 单处理器的自旋锁 : 首先,自旋锁的目的如果在系统不支持内核抢占时,自旋锁的实现也是空的,因为单核只有一个线程在执行,不会有内核抢占,从而资源也不会被其他线程访问到。 其次,支持内核抢占,由于自旋锁是禁止抢占内核的,所以不会有其他的进程因为等待锁而自旋. 最后,只有在多cpu下,其他的cpu因为等待该cpu释放锁,而处于自旋状态,不停轮询锁的状态。所以这样的话,如果一旦自旋锁内代码执行时间较长,等待该锁的cpu会耗费大量资源,也是不同于信号量和互斥锁的地方。 简单来说,自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。 自旋锁内睡眠禁止睡眠问题 :如果自旋锁锁住以后进入睡眠,而此时又不能进行处理器抢占(锁住会disable prempt),其他进程无法获得cpu,这样也不能唤醒睡眠的自旋锁,因此不相应任何操作。 自旋锁为什么广泛用于内核

[转帖]Latch

回眸只為那壹抹淺笑 提交于 2019-12-04 10:17:32
Latch (转) http://blog.csdn.net/tianlesoftware/article/details/5263238 2013-05-24 15:33:09 huashanlunjian 阅读数 13更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/huashanlunjian/article/details/84435068 一. Latch 说明 1.1 Latch 在之前的一篇文章里的第四部分对Latch 有了说明,参考: 锁 死锁 阻塞 Latch 等待 详解 http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5822674.aspx Latch属于System Lock, 用于保护SGA区中共享数据结构的一种串行化锁定机制。Latch的实现是与操作系统相关的,尤其和一个进程是否需要等待一个latch、需要等待多长时间有关。 Latch是Oracle提供的轻量级锁资源,是一种能够极快地被获取和释放的锁,能快速,短时间的锁定资源,防止多个并发进程同时修改访问某个共享资源,它只工作在SGA中,通常用于保护描述buffer cache中block的数据结构。

Linux中自旋锁

▼魔方 西西 提交于 2019-12-04 07:05:51
传统的spinlock   Linux的的内核最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用要是锁未被争用,请求锁的执行线程就可以立即得到它,继续执行。在任意时间,自旋锁都可以防止多于一个的执行线程同时进入临界区。同一个锁可以用在多个位置,例如,对于给定数据的所有访问都可以得到保护和同步。   自旋锁在同一时刻至多被一个执行线程持有,所以一个时刻只有一个线程位于临界区内,这就为多处理器机器提供了防止并发访问所需的保护机制。在单处理机器上,编译的时候不会加入自旋锁,仅会被当作一个设置内核抢占机制是否被启用的开关。如果禁止内核抢占,那么在编译时自旋锁就会被剔除出内核。   传统的自旋锁本质上用一个整数来表示,值为1代表锁未被占用, 为0或者为负数表示被占用。   在 单处理机环境 中可以使用特定的原子级汇编指令 swap 和 test_and_set 实现进程互斥,(Swap指令:交换两个内存单元的内容;test_and_set指令取出内存某一单元(位)的值,然后再给该单元(位)赋一个新值) 这些指令涉及对同一存储单元的两次或两次以上操作,这些操作将在几个指令周期内完成,但由于中断只能发生在两条机器指令之间,而同一指令内的多个指令周期不可中断

The Ising model and phase transitions

爱⌒轻易说出口 提交于 2019-12-04 06:25:48
The Ising model and phase transitions Remarks on completing the module This assignment is summatively assessed. It is imperative that you submit the notebook on time. Ising model The task for this assignment is to implement the Ising Model introduced in the lecture. The structure in terms of a code skeleton provided below needs to be followed. Otherwise the automatic tests, which allow you to test different parts of you implementation, will not work. We consider an Ising model, in which the interaction energy of spin is calculated from where the sum is over the 4 nearest neighbours of . We

VS2015+OpenGL 配置

一个人想着一个人 提交于 2019-12-04 05:32:21
参考资料: 百度经验 看完上面文章,再去看官方文档,发现他们都是翻译或抄别人的翻译而已,想看原汁原味的官方文档可以点这里: 点我点我 。 资源官网看这里: 点我点我 首先要明确的是,openGL是一个标准,windows和linux都支持它,然后它不需要安装就可以用了,需要的只是电脑的驱动配置而已(我都没去动过这些,不过可以,目测现代一般的都可以,如果不行的话,再回来检查),配置的驱动看这里: 点我点我 。 第二,glut库很便于openGL编程,去这里下载: 点我下载glut库 ,解压得到5个文件:glut.h,glut.dll,glut32.dll,glut.lib,glut32.lib。 第三,安装glut库。假设你的vs的安装路径为MY_VS_ROOT,那么在MY_VS_ROOT/VC/include/下新建一个文件夹GL,然后复制glut.h到这个文件夹下,比如我的就是D:\soft\vs2015\VC\include\GL\glut.h。 然后复制glut.lib和glut32.lib到MY_VS_ROOT/VC/lib/下,最后复制glut.dll和glut32.dll到系统的dll目录下:C:\Windows\system32文件夹内(32位系统)或‪C:\Windows\SysWOW64(64位系统)。 第四,写个代码测试一下。在vs工程下新建一个cpp文件

How to turn a SPARQL/SPIN query/rule into an RDF structure from Java?

匿名 (未验证) 提交于 2019-12-03 10:24:21
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have been using TopQuadrant Composer Free Edition (TBC FE) to embed SPARQL/SPIN rules (primarily SPIN constructors) in my OWL ontologies stored as RDF. Part of this process is that the SPARQL source code is tokenized/encoded in an RDF structure according to http://spinrdf.org/sp.html which the schema specified in http://spinrdf.org/sp . It is this structure that actually gets interpreted by RDF4J to run the SPIN rules. I'm also using RDF4J as my triple store, reasoner, SPARQL endpoint, and SPIN rule engine. In addition, I'm generating

UIView Infinite 360 degree rotation animation?

匿名 (未验证) 提交于 2019-12-03 02:13:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I'm trying to rotate a UIImageView 360 degrees, and have looked at several tutorials online. I could get none of them working, without the UIView either stopping, or jumping to a new position. How can I achieve this? The latest thing I've tried is: [UIView animateWithDuration:1.0 delay:0.0 options:0 animations:^{ imageToMove.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; But if I use 2*pi, it doesn't move at all (since it's the same position). If I try to do just pi (180 degrees), it

Using python's Multiprocessing makes response hang on gunicorn

匿名 (未验证) 提交于 2019-12-03 02:03:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: First I will admit that there are a few to many keywords in that title, but I am indeed really trying to capture the problem in the correct manner. The issue here is that I can not seem to be able to correctly create a sub process using the python multiprocessing module without it causing the webpage response to hang. I have tried a few recent versions of gunicorn and the problem persists. Interestingly, the problem never was an issue on ubuntu server, but now moving the application to rhel6.5 this issue has presented itself. Here is the