多线程的那些事(之数据同步)

线程同步:是指线程之间所具有的一种制约关系,一个线程的执行依赖于另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒

多线程的创建其实十分简单,在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)。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值