一.创建线程

1>windows

HANDLE aThread[MAX_THREAD];

 函数原型:

 HANDLE WINAPI CreateThread(
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_opt_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_opt_ LPDWORD lpThreadId
);

 参数说明:

lpThreadAttributes  表示线程内核对象的安全属性;NULL表示使用默认设置;
dwStackSize      表示线程栈空间的大小;0表示使用默认大小(1MB);
lpStartAddress    表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址;
lpParameter      传给线程函数的参数;
dwCreationFlags    指定额外的标志来控制线程的创建,为0表示线程创建之后立即就可以进行调度,如果为CREATE_SUSPENDED则表示线程创建后暂停运行,这样它就无法调度,直到调用ResumeThread();
lpThreadId      返回线程的ID号,NULL表示不需要返回该线程的ID号。

  线程创建成功返回新线程的句柄,不成功则返回NULL。

2>linux

pthread_t aThread[MAX_THREAD];

函数原型:

int pthread_create(
pthread_t*            tidp,
const pthread_attr_t*      attr,
void*               (*start_rtn)(void*),
void*               arg
);

 参数说明:

第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性,NULL表示默认设置。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数,NULL表示无参数传递。

  若线程创建成功,则返回0。若线程创建失败,则返回出错编号。

二.创建信号量

1>windows

HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
LONG             lInitialCount,
LONG             lMaximumCount,
LPCTSTR           lpName
);

  参数说明:

lpSemaphoreAttributes   信号量的属性,一般设置为NULL。
lInitialCount       信号量初始值,0~lpMaximumCount之间.如果lInitialCount 的初始值为0,则该信号量默认为unsignal状态;如果lInitialCount的初始值大于0,则该信号量默认为signal状态。
lMaximumCount       设置信号量的最大计数。
lpName          指定信号量对象的名称,NULL表示无名的信号量。

  

成功返回信号量对象的句柄,失败返回NULL。

2>linux

int sem_init(sem_t *sem, int pshared, unsigned int value);

 参数说明:

sem      指向信号量对象
pshared   指明信号量的类型。不为0时,表示此信号量在进程间共享;为0时,表示只能为当前进程的所有线程共享。
value    信号量初始值

 成功时返回 0;错误时,返回 -1,并把 errno 设置为合适的值。

 

三.操作信号量

1>windows

BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
);

  参数说明;

hSemaphore       所要操作的信号量对象的句柄,这个句柄是CreateSemaphore或者OpenSemaphore函数的返回值。这个句柄必须有SEMAPHORE_MODIFY_STATE 的权限。
lReleaseCount   这个信号量对象在当前基础上所要增加的值,这个值必须大于0,如果信号量加上这个值会导致信号量的当前值大于信号量创建时指定的最大值,那么这个信号量的当前值不变,同时这个函数返回FALSE;
lpPreviousCount  指向返回信号量上次值的变量的指针,如果不需要信号量上次的值,那么这个参数可以设置为NULL;

  成功返回TRUE;如果失败返回FALSE,可以调用GetLastError函数得到详细出错信息.

DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
)

  参数说明;

hHandle        内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0
dwMilliseconds 需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。

  如果等待超时,该函数返回WAIT_TIMEOUT。如果该函数失败,返回WAIT_FAILED。 

2>linux

int sem_post(sem_t *sem);

  成功时返回 0;错误时,信号量的值没有更改,-1 被返回,并设置 errno 来指明错误。

int sem_wait(sem_t *sem);

   成功时返回 0;错误时,信号量的值没有更改,-1 被返回,并设置 errno 来指明错误。

四.销毁信号量

1>windows

BOOL CloseHandle(HANDLE hObject);

2>linux

int sem_destroy(sem_t *sem);

windows与linux多线程对比的更多相关文章

  1. windows 和 linux 多线程

    学习了几天多线程技术,做个总结,便于记忆. 一般 多线程传递参数 为 void*  所以会有一个强制转换过程  (int*) (void *)等,传递多个参数选择 结构体指针.为了避免多个线程访问数据 ...

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

    Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好 ...

  3. Windows与Linux的命令行命令对比

    Windows与Linux的命令行命令对比 * Windows不区分大小写,Linux区分大小写的. sn DOS Command UNIX Equivalent Effect 影响 1 ASSIGN ...

  4. [转帖]Windows与Linux的命令行命令对比

    Windows与Linux的命令行命令对比 https://www.cnblogs.com/sztom/p/10785140.html * Windows不区分大小写,Linux区分大小写的. sn ...

  5. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册

    <Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...

  6. 转:socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  7. socket编程在windows和linux下的区别

    如无其它说明,本文所指Linux均表示2.6内核Linux,GCC编译器,Windows均表示Windows XP系统,Visual Studio 2005 sp1编译环境. 下面大概分几个方面进行罗 ...

  8. windows和linux套接字中的select机制浅析

    先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待 ...

  9. socket在windows下和linux下的区别

    原文:socket在windows下和linux下的区别 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h    错误处理:errno.h 2 ...

随机推荐

  1. Keras的一些功能函数

    摘自: https://www.cnblogs.com/Anita9002/p/8136357.html 1.模型的信息提取 # 节点信息提取 config = model.get_config() ...

  2. hdu5965扫雷 枚举+递推

    题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...

  3. sqlyog连接mysql8.0

    1.本人安装的是mysql8.0社区版,安装包名称:mysql-installer-community-8.0.12.0.msi,可自行到官网下载. 2.安装完成后用sqlyog连接数据库出现密码乱码 ...

  4. vscode 插件 与 技巧

    lit-html 下载量:3 万 在 JavaScript/TypeScript 的文件中,如果有使用到 HTML 标记,lit-html 提供语法高亮和相应的补全支持. Git History 下载 ...

  5. github 远程库

    一.在 Github 创建 django 项目时:先在本地创建项目,然后设置为本地仓库,再与远程仓库关联 在 Git Bash 进入django项目目录,输入命令git init,此时这个目录变成Gi ...

  6. C++自己实现一个String类

    C++自己实现一个String类(构造函数.拷贝构造函数.析构函数和字符串赋值函数) #include <iostream> #include <cstring> using ...

  7. 二分查找算法的java实现

    1.算法思想: 二分查找又称折半查找,它是一种效率较高的查找方法.    时间复杂度:O(nlogn) 二分算法步骤描述: ① 首先在有序序列中确定整个查找区间的中间位置 mid = ( low + ...

  8. git(windows)

    windows下比较比较好用的git客户端: 1. msysgit + TortoiseGit(乌龟git) 2. GitHub for Windows 3. Git Extensions

  9. 基于物品的协同过滤item-CF 之电影推荐 python

    推荐算法有基于协同的Collaboration Filtering:包括 user Based和item Based:基于内容 : Content Based 协同过滤包括基于物品的协同过滤和基于用户 ...

  10. 初学python之路-day09

    今天的主要内容为内存管理. 1.引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1 # 2.变量的值被解绑,该值的引用计数 -1 # 3.引用计数为0时就会被垃圾回收机制回收 ...