多线程的思考

多线程把握几点:



1. 一个对象or多个对象,做同样的事or不同的事,完成的目标。

举个例子:

服务器:服务器处理,多个用户的web请求。大致要做三件事,首先接收用户请求,建立连接。其次进行处理。最后返回结过给用户。这就可以分成三件事。分别是多个对象,分别干请求、处理、响应。目标:完成用户的请求。

卖票:不同的卖票人员,干着相同的事(卖票),目标:出售更多的票。

线程作为一个入口,许多对象在这个线程里做事。这个线程事是一件大事,但是需要多个对象的动作一起完成。

线程的通讯问题:

一个线程把问题放入数据池里:里面指明哪个线程来处理,指令是什么,传递的数据。那么其他线程可以循环,检索自己是否属于条件,并删除数据。

当一个线程完成了工作,打算让原线程来实用该数据,那么可以采用放入数据池,但是原线程应该是下面两种状态之一:等待,循转。也可以采用去类似“消息”的方式,比如引用了原线程的一个变量,然后用此变量去执行。从机器执行角度来说是,这个其实是转到原线程的一个区域,IP指针被执行这一函数,但是要考虑,如果没有加锁,那么执行过程中,线程可能会被切换,可能IP会“跳跃”到本线程的另一个代码块中执行,那么考虑可能会使数据不一致,该代码块可能需要的数据并不是真是数据,因为原线程引用该变量执行还没有结束。

所以这也解释了,当外部的线程去操作界面时候,要去加锁,即可能执行一半的时候,我去点击某个按钮,那么两者数据不一致,势必会出现问题。

通讯的实例:线程2执行结束后,加锁,去引用线程1的一个变量,设置好数据后,解锁,此时线程将会按照分配的方式去跑。

qt写入锁:写入时,全部加锁,那么只会允许一个进入。

读取时,不会做此操作。

锁分几种:排他锁,此时屏蔽中断,只允许执行自己这个。同一个函数到同一位置,只允许一个。资源锁,实用资源前会检查资源锁是否满足。

大部分是,使用到某一资源的不同线程,用前会加锁,其他没有使用该资源/变量的不会加锁。也是不符合逻辑的。

分类:软件工程 时间:2015-05-12 人气:436
本文关键词:
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.042 (s). 13 q(s)