windows多线程相关

1.多线程同步的方法

a)entercirticalsection leaveciriticalsection

b)Mutex互斥对象 waitforsingleobject releasemutex使用方法和上面一个类似

c)createevent waitforsingleobject setevent使event对象变为受信状态 resetevent使event对象变未受信状态,通过这两种的设置来控制那些等街待这个event对象的线程的执行

d)semophore和以上几种单一入口控制不同,semophore是对多个并行入口进行控制,当这多个入口都被占用的时侯,semophore对象才变为阻滞状态,因此线程一旦处理完相关任务要记得调用releasesemophore来释放资源

e)waitformultiobject等待多个内核对象,只用这多个内核对象都变为受信状态,后续的代码才可以被执行。

f)interlockedincreament and interlockeddecreament这是一系列的函数,每次将一个变量值加1或减1.

 

2.关于线程局部存储

每个线程都有自己的数组,最大长度是1000

每次tlsalloc找到一个可用index然后返回,然后进程中的各个线程都可以以这个index参数来调用tlsgetvalue or tlssetvalue来读写相应index的数组元素,虽然线程都可以以相同的index作为参数,但这并不会冲突,因为它们都只操作本线程相关的数组

不通过tlsalloc提供的索引tlssetvalue一样可以设置各自数组中特定index的数组项的值,既然不通过TlsAlloc一样能通过索引来自行存取数据,那还需要tlsalloc来干嘛,这是因为有时我们可能需要多个线程保有同一类型的数据,但这数据是线程相关的,而且我们在调用tlsgetvalue时并不确定其它线程是否通过tlsalloc声明占有了该index,所以我们需要重新用tlsalloc来获取一个对所有线程可用的index,在用完后记得用tlsfree来释放该index,否则可能造成TLS_OUT_OF_INDEXES

windows多线程相关_第1张图片

你可能感兴趣的:(windows)