windows 和linux 同步api对比

初始化临界区

(win)

InitializeCriticalSection(RTL_CRITICAL_SECTION &rtl_critial_section)

(linux)

pthread_mutexattr_init(&(mutex)->attr);

pthread_mutexattr_settype(&(mutex)->attr, PTHREAD_MUTEX_RECURSIVE);

pthread_mutex_init(&(mutex)->mtx, &(mutex)->attr);

删除临界区

(win)

DeleteCriticalSection(RTL_CRITICAL_SECTION &)

(linux)

pthread_mutex_destroy(pthread_mutex_t  &mutex)

进入临界区

(win)

EnterCriticalSection(RTL_CRITICAL_SECTION &rtl_critical_section)

(linux)

pthread_mutex_lock(pthread_mutex_t  &mutex)

尝试进入临界区

(win)

TryEnterCriticalSection(RTL_CRITICAL_SECTION &rtl_critical_section )

(linux)

pthread_mutex_trylock(pthread_mutex_t  &mutex)

离开临界区

(win)

LeaveCriticalSection(RTL_CRITICAL_SECTION &rtl_critical_section )

(linux)

pthread_mutex_unlock(pthread_mutex_t  &mutex)

把目标操作数(第1参数所指向的内存中的数)与一个值(第3参数)比较,如果相等,则用另一个值(第2参数)与目标操作数(第1参数所指向的内存中的数)交换;InterlockedExchange是不比较直接交换。整个操作过程是锁定内存的,其它处理器不会同时访问内存,从而实现多处理器环境下的线程互斥

(win)

InterlockedCompareExchange(Destination, newvalue, oper)

(linux)

__sync_val_compare_and_swap(Destination, oper, newvalue)

v的值原子添加P的大小

(win)

InterlockedExchangeAdd(V, P)

(linux)

__sync_fetch_and_add(V, P)

原子增加一

(win)

InterlockedIncrement(T)

(linux)

__sync_fetch_and_add(T, 1)

原子减少一

(win)

InterlockedDecrement(T)

(linux)

__sync_fetch_and_sub(T, 1)

获取当前线程id

(win)

GetCurrentThreadId()

(linux)

syscall(SYS_gettid)

如果指定一个非零值,函数处于等待状态直到hHandle 标记的对象被触发,或者时间到了。如果dwMilliseconds 为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds 为INFINITE,对象被触发信号后,函数才会返回。对应的linux实现使用条件变量

(win)

WaitForSingleObject(event,INFINITE)

(linux)

pthread_mutex_lock( &m_tx );
pthread_cond_wait( &event, &m_tx );
pthread_mutex_unlock( &m_tx );

退出线程(退出参数0)

(win)

ExitThread(0)

(linux)

pthread_exit(0)

设置线程优先级,pthread_setschedparam在多线程开发中经常被使用的,它主要用于设置线程的调用策略和优先级

(win)

SetThreadPriority (handle,nPrioroty)

(linux)

sched_param sp = {nPriority};
if(0 == pthread_setschedparam(m_pid, SCHED_RR, &sp))
{
return true;
}
return false;

获取优先级

(win)

GetThreadPriority( Handle m_hThread )

(linux)

int policy;
sched_param sp;
pthread_getschedparam(m_pid, &policy, &sp))
sp.sched_priority;

初始化互斥量

(linux)

pthread_mutex_init(pthread_mutex_t  &mutex),0)

初始化条件变量

pthread_cond_init(&cond,0)

删除互斥量

pthread_mutex_destroy(pthread_mutex_t  &mutex))

删除条件变量

(linux)

pthread_cond_destroy(pthread_cond_t &cond)

向条件变量发起信号

(linux)

pthread_cond_signal(pthread_cond_t &cond)

挂起等待结束(无限等待)    true在阻塞期间允许进入警告状态(windows才有)

(win)

WaitForSingleObject Ex(handle, INFINITE,true)

(linux)

pthread_join    (pthread_t thid, void ** ret_val)   常用pthread_join(pid,0)

时间: 2024-11-21 02:03:42

windows 和linux 同步api对比的相关文章

【av68676164(p31-p32)】Windows和Linux同步机制

4.6.1 Windows同步机制 临界区(CRITICAL_SECTION) 在进程内使用,保证仅一个线程可以申请到该对象 临界区内是临界资源的访问 相关的API函数 初始化临界区 WINBASEAPI VOID WINAPI InitializeCriticalSection( _Out_ LPCRITICAL_SECTION lpCriticalSection ); 删除临界区 WINBASEAPI VOID WINAPI DeleteCriticalSection( _Inout_ LP

windows与linux常用命令对比

原文地址:http://blog.51cto.com/12173069/2121854

[转帖]Windows和Linux对决(多进程多线程)

Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好呢.. 关于 windows 和 linux的东西 先放这里 晚上有时间仔细啃一下. 并行程序设计分为共享内存和消息驱动(其实就是分布式内存)两种, 共享内存:所有CPU共内存,所有CPU由一个操作系统控制的,例如Windows和Linux/UNIX,目前流行的多核.多CPU机器都是属于这种: 消息

最常用的Windows、Linux网络命令总结

题记:工作中经常用到Windows.Linux的网络命令,记录总结出最常用的,一方面对Windows.Linux做个对比:另一方面加深对网络命令的认知. 有不全的地方,大家补上.一起探讨下,谢谢! 2014-11-29 pm10:29思于家中床前 作者:铭毅天下 转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/41604621 如果感觉本文对您有帮助,请点击'顶'支持一下,您的支持是我坚持写作最大的动力,谢谢!

Linux与Windows API对比

对象 操作 Linux API Windows API 线程 创建 pthread_create() CreateThread() 退出 pthread_exit() ThreadExit() 等待 pthread_join() WaitForSingleObject() 互斥锁 创建 pthread_mutex_init() CreateMutex() 销毁 pthread_mutex_destroy() CloseHandle() 加锁 pthread_mutex_lock() WaitFo

Windows 和 Linux 的IPC API对应表

原文出处:http://blog.csdn.net/zhengdy/article/details/5485472                                              Windows 和 Linux 的IPC API对应表 Table 1. Process mapping Windows Linux Classification CreateProcess() CreateProcessAsUser() fork() setuid() exec() Mapp

Mount实现Linux和Windows文件互相同步

我们前几篇文章介绍了使用SCP.Rsync.Curl等服务实现Linux到windows文件的互相拷贝,而我们今天介绍一个更简单的方法,就是通过mount命令挂载共享目录来实现Linux到windows的文件互传,具体见下: 我们使用的环境为Centos6.4+windows server2012: 因为linux需要挂载windows的共享目录,所以我们首先在windows上也创建一个共享目录 新建 linxushare 然后对于该共享目录我们设置单独的用户及密码进行数据拷贝,这样主要为了安全

[数据同步] Linux与Windows进行数据同步

实验环境 服务端:Linux Centos 6.8 (10.208.131.198) 客户端:windows 2008 (10.208.131.199) 服务端 一.安装rsync服务 设置开机自启动   # yum install xinetd rsync -y # chkconfig xinetd on # chkconfig rsync on 二.设置rsync以服务方式运行  # vim /etc/xinetd.d/rsync service rsync {         disabl

Windows与Linux跨机房数据同步

背景: 总部研发中心需要将机房的存储SMB服务中某些文件同步到 IDC 及 分公司研发中心办公区内部SMB. IDC与总部研发中心通过IPsecVPN,形成隧道链路:分公司办公区域仅为基本网络. 难点: 办公区无硬件VPN类设备,无固定IP 总部的防火墙提供的VPN客户端Linux版本仅为1.00,需要开图形且极其不好用:  解决方法: 办公区域增加前置机安装windows版本软件VPN,实现与总部前置机联通.  网络连接拓扑如下:   应用实施拓扑及步骤如下:     实施步骤1: 配置两地S