
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include <fcntl.h>
int main(void)
{
int fd1=0,fd2=0
int output
output=open("/root/647.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR)
if( (fd1=fork() )==0)
{
lockf(output, 1, 0)
write(output,"fd1\n",4)
sleep(2)
write(output,"fd1\n",4)
lockf(output, 0, 0)
}
else if( (fd2=fork() )==0)
{
lockf(output, 1, 0)
write(output,"fd2\n",4)
sleep(2)
write(output,"fd2\n",4)
lockf(output, 0, 0)
}
else
{
lockf(output, 1, 0)
write(output,"fd\n",3)
sleep(2)
write(output,"fd\n",3)
lockf(output, 0, 0)
}
return 0
}
结果为
fd
fd
fd2
fd2
fd1
fd1
让我来告诉你答案!设置状态变量lock=0,在占用资源的函数中,设置lock=1;并在处理结束后设lock=0.比如:
boollock=0
intscan()
{
while(lock!=0)//循环检测,直到资源释放才执行下面的语句
lock=1//锁定资源
...//具体的执行扫描的语句
lock=1//释放资源
return0
}
这个方法容易实现,但是占用CPU,假定其他线程正在占用扫描仪,那么这个线程就会在自己的时间片内不停的执行while语句直到对方释放扫描仪。由此造成了浪费。
现在流行的做法是通过中断信号来做,那是一本书的内容,建议看linux内核编程方面的书。
首先需要安装boost,步骤如下:
下载到 boost_1_49_0.tar.bz2 (当然,其他压缩格式也可以)后,可以把它放在用户目录下,即:~/
解压缩:tar -jxvf boost_1_49_0.tar.bz2
这样,出现文件夹:~/boost_1_49_0
然后进入:$ cd boost_1_49_0
你会发现有一�¸.shå½ä»¤ï¼bootstrap.sh
è¿è¡å®ï¼$ ./bootstrap.sh ï¼boostèªå·±çget startææ¡£ä¸è¯´è®¾ç½®åæ° --prefix=dir å ¶ä¸dirä¸ºä½ æ³æå®çå®è£ æä»¶å¤¹ï¼æå»ºè®®å°±ä¸ç¨å è¿ä¸ªåæ°ï¼å®ä¼é»è®¤å®è£ å°/usr/localï¼
ç»æååºç°ä¸ä¸ªå¯æ§è¡æä»¶ï¼ ~/boost_1_49_0/b2
è¿è¡è¿ä¸ªæä»¶ï¼ $ sudo ./b2 install ï¼Ubuntuç¨æ·åä¸å«å¿äºå sudoï¼ä¸ç¶å®è£ åå°æ æ³å®å ¨ä½¿ç¨ï¼
ç¼è¯å®è£ æ¶é´æ¯è¾é¿ï¼æ ¹æ®ä¸åæºå¨çæ åµ20ï½40åéãç»æåå³å®è£ 宿¯ã
boost::threadç使ç¨
#include <boost/thread.hpp>#include <iostream>
void task1() {
// do stuff
std::cout << "This is task1!" << std::endl
}
void task2() {
// do stuff
std::cout << "This is task2!" << std::endl
}
int main (int argc, char ** argv) {
using namespace boost
thread thread_1 = thread(task1)
thread thread_2 = thread(task2)
// do other stuff
thread_2.join()
thread_1.join()
return 0
}
ç¼è¯æ¶çå½ä»¤ä¸ºï¼
$ g++ -I./inlcude -L./lib example.cpp -lboost_thread -o example
ç¼è¯ä¹åä¼åºç°ä¸ä¸ª example ç坿§è¡æä»¶ï¼å¯ä»¥è¿è¡ï¼./example ï¼ ç»ææ¾ç¤ºï¼
This is task2!
This is task1!
å¯è½ä½ å¨è¿è¡æ¶ä¼åºç°è¿æ ·çé误ï¼error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory
è¿æ¯å 为è¦ç¨å°çåºä¸å¨é»è®¤çç¯å¢åééï¼å¯ä»¥ä½¿ç¨ä¸é¢çå½ä»¤æ·»å ï¼
$ sudo ldconfig /usr/local/lib
æ·»å åï¼åæ§è¡./exampleï¼è¿æ ·ä½ 就宿äºä½ ç第ä¸ä¸ªboost::threadç¨åºã
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)