`
glintstar
  • 浏览: 12191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
BLUESKY 一步一个脚印向前走     首页    新文章    新随笔        管理 C宏定义的简单总结 今天在网上突然发现了下面几个关于c代码中的宏定义的说明,回想下,好像在系统的代码中也见过这些零散的定义,但没有注意,看到别人总结了下,发现果然很有用,虽然不知有的道可用与否,但也不失为一种手段,所以就先把它摘抄下来,增加一点见识: 1,防止一个头文件被重复包含 #ifndef BODYDEF_H #define BODYDEF_H   //头文件内容 #endif 2,得到指定地址上的一个字节或字 #define  MEM_B( x )  ( *( (byte *) ...

Ace

    博客分类:
  • ACE
#include <pwd.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <stdio.h> #include <sys/times.h> #include <stdlib.h> #include <sys/wait.h> #include "ace/SOCK_Stream.h" #include "ace/INET_Addr.h" #include &quo ...

ACE_Task

    博客分类:
  • ACE
要创建任务或主动对象,你必须从ACE_Task类派生子类。在子类派生之后,必须采取以下步骤: 实现服务初始化和终止方法:open()方法应该包含所有专属于任务的初始化代码。其中可能包括诸如连接控制块、锁和内存这样的资源。close()方法是相应的终止方法。 调用启用(Activation)方法:在主动对象实例化后,你必须通过调用activate()启用它。要在主动对象中创建的线程的数目,以及其他一些参数,被传递给activate()方法。activate()方法会使svc()方法成为所有它生成的线程的启动点。 实现服务专有的处理方法:如上面所提到的,在主动对象被启用后,各个新线程在svc( ...
//Spawn the first set of threads that work on task 1. if(ACE_Thread_Manager::instance()->spawn_n(num_task_1, (ACE_THR_FUNC)taskone,//Execute task one 0, //No arguments THR_NEW_LWP, //New Light Weight Process ACE_DEFAULT_THREAD_PRIORITY, 1)==-1) //Group ID is 1 ACE_ERROR((LM_ERROR, "Fa ...
ACE中的栅栏(Barrier)   栅栏有一个好名字,因为它恰切地描述了栅栏应做的事情。一组线程可以使用栅栏来进行共同的相互同步。组中的每个线程各自执行,直到到达栅栏,就阻塞在那里。在所有相关线程到达栅栏后,它们就全部继续它们的执行。就是说,它们一个接一个地阻塞,等待其他的线程到达栅栏;一旦所有线程都到达了它们的执行路径中的“栅栏点”,它们就一起重新启动。   在ACE中,栅栏在ACE_Barrier类中实现。在栅栏对象被实例化时,它将要等待的线程的数目会作为参数传入。一旦到达执行路径中的“栅栏点”,每个线程都在栅栏对象上发出wait()调用。它们在这里阻塞,直到其他线程到达它们各自的“栅 ...
ACE_Condition类是针对OS条件变量原语的包装类。那么,到底什么是条件变量呢?   线程常常需要特定条件被满足才能继续它的操作。例如,设想线程需要在全局消息队列里插入消息。在插入任何消息之前,它必须检查在消息队列里是否有空闲空间。如果消息队列在“满”状态,它就什么也不能做,而必须进行休眠,过一会再重试。就是说,在访问全局资源之前,某个条件必须为真。然后,当另外的线程空出消息队列时,应该有方法通知或发信号给原来的线程:在消息队列里有位置了,现在应该再次尝试插入消息。这可以使用条件变量来完成。条件变量不是被用作互斥原语,而是用作特定条件已经满足的指示器。   在使用条件变量时,你的程序 ...
Active Object 模式是Command模式的一种,是实现多线程控制的一项古老技术 . 在《敏捷软件开发》这本书中描述的算法如下: 1、构造一个命令。(实现Command模式的一个命令) 2、将该命令放入Active Object Engine(也就是放入一个队列,LinkedList) 3、从该Engine取出一个命令,执行,若该命令没有执行过,设为执行过,然后将自己加入队列尾部,若执行过,判断该命令执行需要的事件发生没有,未发生,再将自己加入队列尾部。事件发生了,将需要执行的命令加入队列尾部。 那么到底什么是主动对象呢?传统上,所有的对象都是被动的代码段,对象中的代码是在对它发出 ...
编译生成动态连接库后,进而可以在程序中进行调用。在Linux中,可以采用多种调用方式,同Windows的系统目录(..system32等)一样,可以将动态库文件拷贝到/lib目录或者在/lib目录里面建立符号连接,以便所有用户使用。下面介绍Linux调用动态库经常使用的函数,但在使用动态库时,源程序必须包含dlfcn.h头文件,该文件定义调用动态链接库的函数的原型。    (1)_打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。   ...
http://blog.csdn.net/apachecq/archive/2009/01/13/3769689.aspx 比较简单的LCA。我先用的是邻接表来存放树结构和查询,结果要超时。但程序应该可以在ZOJ上AC。我自己判断超时的原因可能是对于本题的多组数据输入格式,每做完一组数据后,需要对各个数据结构清0,对于动态申请的邻接表结点要逐一释放空间。这些操作对于一组输入数据可能花不了多长时间,但对于多组数据,就会花很长时间。 然后我计算了一下空间限制,对于N=900的上限,开两个二维数组来存放树和查询,采用“假指针”方式存放,空间大约占用6M左右,完全过得了空间限制。于是就改了。再次提交 ...
Global site tag (gtag.js) - Google Analytics