以下是我的PID经理。 我想修改它,所以它使用multithreading。 因此,我想为每个线程请求一个PID(也许创build20左右像我在做while循环),睡一段随机时间(我假设使用睡眠()),然后释放PID(类似于你在下面看到)。
当谈到C和linux中的线程时,我是个新手,所以如果有人可以帮我修改这个。 我会从clone()函数调用开始吗?
#include <stdio.h> #include <stdlib.h> #include <limits.h> #define MIN_PID 300 #define MAX_PID 5000 #define CB CHAR_BIT int sz = MAX_PID - MIN_PID + 1; unsigned char *unsignedChar; int allocate_map(); int allocate_pID(); voID release_pID(int pID); int main() { int map = allocate_map(); if (map == 1) { printf("nBitmap Data Structure initialized.n"); int ID = 0,i = 0; //create 20 processes while (i < 20) { int val = allocate_pID(); printf("nProcess %d: pID = %d",i+1,val); i++; } //release a few processes release_pID(303); printf("nProcess 303 released."); release_pID(308); printf("nProcess 308 released."); release_pID(309); printf("nProcess 309 released."); //allocate a few more processes after this release int val = allocate_pID(); printf("nProcess %d : pID = %d",++i,val); //should be 303 val = allocate_pID(); printf("nProcess %d : pID = %dn",val); //should be 308 } else printf("nFailed to initialize data structure.n"); } /* Creates and initializes a bitmap data structure for representing pIDs; returns —1 for unsuccessful,1 for successful */ int allocate_map() { unsignedChar = (unsigned char*)malloc((sz+CB-1)/CB * sizeof(char)); if (unsignedChar) return 1; return -1; } /* Allocates and returns a pID; returns -1 if it is unable to allocate a pID (all pIDs are in use) */ int allocate_pID() { int i = 0; int pID = unsignedChar[i/CB] & (1 << (i & (CB-1))); while (pID != 0) { i++; pID = unsignedChar[i/CB] & (1 << (i & (CB-1))); } if (i+MIN_PID > MAX_PID) return -1; unsignedChar[i/CB] |= 1 << (i & (CB-1)); return i+MIN_PID; } /* Releases a pID given a pID parameter*/ voID release_pID(int pID) { if (pID < 300) { printf("nInvalID PID: It should lIE between 300 and 3000."); return; } int i = pID - MIN_PID; unsignedChar[i/CB] &= ~(1 << (i & (CB-1))); }
SetwindowPos / MoveWindow持续存在的问题
“pthread_setname_np”未在此范围内声明
多端口监听套接字linux
在linux上用X11抓取特定键上的事件
CMake“make install”或在windows中包含一个库
检测一个进程的两个窗口
C#和部分工作的SendMessage?
在R包中更改Mac与linux的构build选项
在windows上使用Boost(Visual Studio)
Createfile在打开lsass.exe时失败
Posix线程是最简单和规范的方式来做到这一点。
维基百科已经有了一个很好的例子。
基本上,你可以通过pthread_create()方法创建线程实例,然后通过pthread_create()加入或等待它们完成。
请注意,Wikipedia条目还提到了一些关于使用gcc进行编译的内容。 -pthread或-lpthread在那里是非常必要的,否则你会得到未定义的引用。
总结以上是内存溢出为你收集整理的修改multithreading的PIDpipe理器全部内容,希望文章能够帮你解决修改multithreading的PIDpipe理器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)