线程同步:是指线程之间所具有的一种制约关系,一个线程的执行依赖于另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒
多线程的创建其实十分简单,在windows系统下面有很多函数可以创建多线程,比如说_beginthread。我们可以用它来创建一个简单的多线程代码。
// ThreadDataSync1.cpp : 定义控制台应用程序的入口点。
//多线程的那些事(之数据同步1)
#include "stdafx.h"
#include <Windows.h>
#include <process.h>
#include <stdio.h>
unsigned int val=0;
void PrintInfo(void* argv)
{
while(1)
{
printf("&val=%x , val=%d\n",&val,val);
val++;
Sleep(1000);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthread(PrintInfo,0,NULL);
_beginthread(PrintInfo,0,NULL);
while(1)
{
Sleep(1);
}
system("pause");
return 0;
}
通过上面的示例,我们看到作为共享变量的val事实上是可以被所有的线程访问的。这就是线程数据同步的最大优势——方便,直接。因为线程之间除了堆栈空间不一样之外,代码段和数据段都是在一个空间里的。所以,线程访问公共数据,就可以访问公共数据,没有任何的限制。
当然,事物都有两面性。这种对公共资源的访问模式也会导致问题的——数据不同步了也就是数据被破坏了。它是由于系统CPU时间片分配方式引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU时),但是没有办法知道在什么时候,在什么地方线程被打断,这样如何保护线程之间不破坏彼此的数据就显得格外重要了。解决此问题通常有4中种方法:临界区对象(CriticalSection),互斥量对象(Mutex),信号量对象(Semaphore),事件对象(Event)。
分享到:
相关推荐
使用临界区对象解决多个线程访问同一段内存数据同步问题
多线程同步大量数据转录的多线程和同步
很不错的源码,3种多线程实现同步方法
Core Data多线程大量数据同步,ios开发
java 多线程导入excel数据,预防高并发,线程同步锁,
基于多线程的QUdpSocket收发数据程序,界面上可以输入目标ip、port,与网络调试助手调试ok 欢迎下载,并指出程序中的问题,谢谢
某电信项目多线程同步数据实例,经生产测试,一分钟同步数据量20W
NoHttp核心架构之多线程通信、线程安全、线程同步;synchronized锁,Lock锁;具体讲解请移步:http://blog.csdn.net/yanzhenjie1003/article/details/50992468
在windows平台上建立的c++多线程demo,利用信号量实现线程同步功能。
《秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据》 http://blog.csdn.net/morewindows/article/details/8646902 配套程序 在《秒杀多线程系列》的前十五篇中介绍多线程的相关概念,多线程同步互斥...
多线程注意:wait()方法的调用要有判定条件常用 while () obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的执行不会有规律了!
在Delphi中利用多线程实现数据采集的方法.doc
设计一个多线程, 并且实现同步, 我理解的多线程需求如下: 1. 线程在Java端启动, 两个线程都调用C的方法 2. 有一个共同的数据, 被C的代码修改, 要求线程能对这个修改做同步, 即线程1
三、还有一种用信号量对象来管理线程同步的,它是在互斥的基础上建立的,但信号量增加了资源计数的功能,预定数目的线程允许同时进入要同步的代码。有点复杂,想不到在哪可以用,现在就不研究论了。 unit Tst_...
JAVA代码采用线程来实现数据库的主从同步更新
通过实例给出利用Java多线程优化读取数据库百万级别数据
C#的多线程同步,C#中四种进程或线程同步互斥的控制方法
主要介绍了Java多线程编程实战之模拟大量数据同步,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
多线程不同步演示2,一个线程写数据,另一个线程读取数据,在没有同步的情况下,会出现什么问题?若你不知道,你可以看看该源码。
Powerbuilder中实现多线程同步查询数据,同时连接不同的数据库 ,实现多线程同步查询数据