C/C++全局变量多线程并发访问临界锁(Critical Section Lock)

因为之前一直习惯于C语言编程,对C++的一些使用方式没有在意过,在阅读一些代码后渐渐的发现了C++的一些便捷性,这种便捷性在一定程度上降低了我们的编码量,对于全局变量多线程并发访问一般可以通过临界区(Critical Section)实现,比如在C语言中形如以下代码:

#include <windows.h>
#define THREAD_NUM 5

CRITICAL_SECTION g_cs;
int              g_nResource;

DWORD WINAPI ThreadProc(LPVOID lpParam)  
{  
    EnterCriticalSection(&g_cs);
    printf("Thread id %d Resource Count %d\n", 
                GetCurrentThreadId(), g_nResource); 
    g_nResource++;

    LeaveCriticalSection(&g_cs);
    return 0;  
}  

int main(void)
{
    HANDLE hThreads[THREAD_NUM] = {0};
    InitializeCriticalSection(&g_cs);

    for (i = 0; i < THREAD_NUM; i++)
        hThreads[i] = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);

    WaitForMultipleObjects(THREAD_NUM, hThreads, TRUE, INFINITE);
    DeleteCriticalSection(&g_cs);
    return 0;
}
Posted in:
  • Windows编程技术
  • 系统应用程序开发
Tagged
  • 线程同步
  • 多线程

彻底关闭并卸载任务栏右下角获取Windows 10图标提示

微软为推销Windows 10可谓是不遗余力,居然强制向广大的Windows 7和Windows 8/8.1用户进行了推送,其结果是小伙伴们发现电脑的右下角出现一个“获取 Windows 10”(英文版:Get Windows 10)的图标,但对于我这样的没有升级欲望的,看到这样的图标颇为不爽,打开任务管理器,居然还有一个GWX.exe的进程,罢了,罢了,反正我也知道可以升级Windows 10,但占用我可怜的内存资源则不能忍受了,所以决定卸载并移除该提示。

Get Windows 10 icon

首先查阅了网上的资料,发现大家都从更新入手,已知更新代号为KB3035583,那么直接卸载,问题不是解决了吗?非也非也,该更新被标注为高优先级,也就是说只能解燃眉之急,不能做长久打算,过一段时间“获取 Windows 10”(为了简便,下文称为“GWX”)还是会死而复活。

Posted in:
  • 计算机应用及维护
  • VBScript/JavaScript/Python
  • Windows系统
  • 系统应用程序开发
Tagged
  • 系统工具
  • windows

买低容量还是高容量的移动硬盘?(以1TB和2TB为例)

之前有个朋友问过我这个问题的,正好今天又有人问,我正好把自己的想法写出来供大家参考吧,当然仅供参考,具体还是看个人,土豪可以无视这篇文章,谢谢!

移动硬盘具体还是基于需求,比如现在是选择2T还是1T的移动硬盘比较合算?我对比了下京东商城的价格:1TB移动硬盘400~500左右,其中450上下的比较多,我这里取值450元;2TB移动硬盘680~800左右,其中以750左右的居多,我这里取值750元。接下来可以算一下:对于1TB移动硬盘来说,其每个吉节(GB)价值为450 / 1000 = 0.45元;对于2TB移动硬盘来说,每个GB价值为750 / 2000 = 0.375元。可以明显看出越是容量大,单位容量的价格就越便宜,这是不是可以说容量越大越好?非也非也,对于小容量需求来说,比如我就备份个500GB的代码,未来5年内代码总量也不会增长到200GB,那么我们选择1TB和2TB就有区别了。

Posted in:
  • 软件推荐及相关资讯
Tagged
  • 硬件资讯
  • 硬件组装

苹果iPhone 4S拆机修理故障电源键步骤备忘(多图)

不觉手里的iPhone 4S陪伴已有近3个年头,不知道是懒还是念旧,一直迟迟未肯换手机,哪怕更新到iOS8后,手机卡得不忍直视,也是这个时候知道手机存储容量的重要性,升级新系统后,容量明显不够用啊,必须删除很多应用有木有。

还记得第一次接触的智能机是多普达(Dopod)的大砖头,使用的是Windows Mobile系统,让我体验到刷机的乐趣,从5.0刷到6.0,还开发了几个手机小程序,直到后来微软不干了,直接说放弃WM项目,搞出个Windows Phone系统,那时候苹果公司的iOS和谷歌公司的Android(安卓)已经开始蚕食大部分智能机市场了,连往日辉煌的Symbian系统也渐渐败下阵来。因为我没有用过Symbian也不好评论,但对于WM系统来说,我觉得一个重要的原因是这货太像Windows桌面系统了,普通人上手有一定难度,而且必须配合触控笔,单手操作完全木有感觉,当然和电容屏不普及有一定关系,毕竟那时候大多数是软软的电阻屏。于是更友好,操作更方便的智能系统就占据上风了,于是微软才抛出Windows Phone来应对。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 硬件故障
  • iPhone
  • 拆机教程

解决DNSMASQ内网地址无法解析No address (A) records available

部署DNSMASQ有一段时间了,最近发现一个奇怪现象,所有内网网站均无法解析,通过 nslookup 命令,得到如下结果:

Server:  192.168.24.6
Address:  223.5.5.5

*** No address (A) records available for oa.example.com

其中 oa.example.com 是内网域名,当然这里我只是举个例子:-) 域名管理员已经将该域名解析到一个私有内网地址上,外部DNS服务器均能正常解析这个域名,唯独部署了DNSMASQ的域名服务器无法解析。

开始时并没有介意,而是通过硬绑定的方式在DNSMASQ的配置文件中将内网地址映射到 oa.example.com ,配置方式如下:

address=/oa.example.com/192.168.25.4
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 网络故障
  • DNS
  • 网络安全
  • dnsmasq

Thinkpad T61笔记本电脑拆机修理记

2008年买过一台Thinkpad T61的笔记本,那段时间周围有很多朋友买惠普(HP)的笔记本,经常有朋友反馈他们的惠普笔记本出现黑屏的故障,开始以为是系统问题,后来我发现是笔记本自身硬件,最离谱的是我有个朋友在保修期间换过两块主板,感觉那时候周围笔记本就惠普这个牌子故障比较多,我自己的小黑T61倒没有出过故障,那时候联想收购的IBM的笔记本业务,对Thinkpad这个牌子吹嘘得也蛮多的,各种各样NB的保护措施,后来惠普爆出黑屏门事件,我也一直庆幸那时候没有买惠普的笔记本,这台T61在3年的保修期间出过一次故障就是显示器越来越暗,最后黑得看不见了,送修过一次,当时联想维修站给出的措施是更换了显示屏,对于这样的举措我也表示认可,不幸的是特约维修站师傅的手艺也不是挺好,拆显示屏的时候屏框咬合口被弄断了好些,而且接缝那块有划痕,好在不是太明显的,我也没有多计较。

换了新显示屏后这台笔记本继续陪伴着我度过无聊的写代码的日子,不幸的是在刚刚过保修后不久显示屏又出问题了,仍然亮度偏暗,出现红屏,因为那时候换屏价格不菲,我周围有人T61换屏花费了700多元,因为笔记本也比较旧了,我也一直没考虑到这个事情,索性外接了台显示器,继续用,当然显示器也坏过一台,不知道T61本身的问题呢,还是我经常写代码的问题,就这样一直磕磕碰碰用到了2013年,这年我换了台笔记本,于是小黑被我遗忘在角落落灰了。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 笔记本
  • 硬件故障
  • thinkpad
  • nvidia
  • 显卡门

iptables劫持并拦截DNS查询53端口实现转向(Redirect)

企业内网中经常会有这样的需求,比如说业务服务器的IP地址为 192.168.6.25 ,大家也就习惯于访问这个地址了,运维也很厚道的将某个域名解析到这个IP地址,这样大家也就不必记住繁琐的IP地址,同时运维也很方便的将业务服务器由 192.168.6.25 的主机迁移到 192.168.6.26 的主机而无需通知客户端更改地址,这也是域名发挥的作用,好了,现在问题来了:-)

客户说我们企业很小,不想另外购买域名,好吧,每年五十几块也是一笔费用,而且购买域名后还需要有人维护,比如要记得续费什么的,略麻烦。同样的还觉得将内网地址公布到外网上不是安全的行为。

经过我的询问得知该企业拥有一台自建的DNS服务器,为全网提供DNS查询,那这事情就好办多了,对DNS服务器软件硬绑定指定的域名到IP地址的记录(由于是我们自己的DNS服务器,这里的域名可以任意设置,当然最好设置为公网上没有的域名地址以避免冲突)。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 网络组建
  • DNS
  • Linux
  • 网络安全
  • iptables

MySQL备份、迁移及开放远程访问3306端口备忘

今天把数据服务器和业务服务器进行了分离,其中涉及对MySQL开放远程访问的,作出记录如下以供备忘:

假设数据服务器IP地址为 192.168.1.101 ,业务服务器IP地址为 192.168.2.51

首先在数据服务器192.168.1.101上安装好MySQL实例,然后使用root访问MySQL并建立好所需要的数据库和用户。

$ mysql -uroot -p
Enter Password:

> CREATE DATABASE business_db;
> GRANT ALL PRIVILEGES ON `business_db`.* TO 'business'@'192.168.2.51' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
> FLUSH PRIVILEGES;
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • mysql
  • 数据库
  • Linux
  • debian
  • phpmyadmin

Composer PHP Fatal error:Allowed memory size of 536870912 bytes exhausted

今天在运行composer update时遇到的,详细的错误消息如下:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted 
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62

Fatal error: Allowed memory size of 536870912 bytes exhausted
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62

一直以为是网络原因,最近连接国外的网络不是很稳定,后来根据报错的信息 Allowed memory size of 536870912 bytes exhausted 提示知道可能是内存分配不够,大家知道在PHP的配置文件 php.ini 中有限制脚本运行内存的设置 memory_limit 把这个值调大一些就可以解决这个问题了。

Posted in:
  • 网络编程与数据库
  • Web开发及相关
Tagged
  • php
  • php配置
  • composer

ASP/VBScript巧用CAPICOM实现随机数、Hash(MD5/SHA1)和Base64编解码

其实很早就想介绍这个Windows内置的ActiveX/COM组件,我 前面有一篇文章 介绍如何借用.NET Framework实现类似于SHA1和MD5哈希算法,如果大家对此感兴趣也可以看一下。

好,言归正传,今天我要介绍的是如何让VBScript利用Windows原生自带的CAPICOM组件来实现随机数、Hash(MD5/SHA1)以及Base64算法,当然在VBScript的世界里,这些算法都有免组件的纯代码实现,当然使用组件的好处就是代码简洁和运行效率的提高,所以我们不妨尝试一下。 既然今天介绍的主角是CAPICOM,当然我们要推荐参考 微软的MSDN文档 ,大家不妨先大致浏览一番,可能大家很快发现下面这段提示:

CAPICOM is a 32-bit only component that is available for use in the following operating systems: Windows Server 2008, Windows Vista and Windows XP. Instead, use the .NET Framework to implement security features.
Posted in:
  • 网络编程与数据库
  • VBScript/JavaScript/Python
  • Web开发及相关
  • 系统应用程序开发
Tagged
  • 加密与编码
  • asp
  • 随机算法
  • 哈希

© Wang Ye / 王 晔. All rights reserved.