Linux
我有两个功能:functionA和functionB
这两个函数可以运行多线程,其中:
一次最多只能运行一个functionA。
一次可以运行多个functionB
functionA和functionB是排他性的,也就是说,如果functionA正在执行,那么functionB必须等待functionA完成,如果有任何functionB实例正在执行,那么functionA必须等到-- functionB的所有实例完成。
你能告诉我如何在Linux中使用线程实现这个功能吗?我尝试了很多方法,但似乎还不够清楚。
Windows
如何使用C++在Windows中完成
很明显,在读取文件(例如)时使用readLock,在写入文件时使用writeLock是合适的。但是,如果我有一个比较两个值的操作,例如:
if (i == j) {
System.out.println("equal);
}
那么可以使用readLock()而不是writeLock来锁定这段代码吗?当然,我没有写任何东西,但是我比较了两个值,这与仅仅读取数据略有不同,因为涉及到一个操作。请记住,"i“或"j”随时都可能改变。理论上,只有在writeLock()没有修改资源的情况下,readLock()才会向前移动,但我可能并不完全理解这个问题的所有复杂性。只是看
据我所知。Linux是异步通知。当文件描述符变得可读/可写/可接受时,epoll_wait将返回这个fd。但是读写仍然是同步的,会阻塞线程。因此Redis6.0使用线程池来处理网络io。
Windows IOCP和Linux是预言家。当io_uring_enter返回时,读取的数据已经放置在缓冲区中,写缓冲区全部已经写入。
我的问题是:
负责复制这些缓冲区数据的?仍然会阻塞当前线程?如果是,如何加快线程池的使用?
如果我只想使用openmp将循环并行化并顺序保存到文件中,那么最好的解决方案是什么?我有一个包含大量信息的文件,我想将其分成相等的块(每个块16字节),使用openmp (C++中的多线程编程)进行加密。加密过程完成后,这些块存储在单个文件中,但序列与原始文件相同。
i_count=meta->subchunk2_size-meta->subchunk2_size%16;// TO GET THE EXACT LENTH MODE 16
// Get the number of processors in this system
int iCPU = om