小编Ark*_*nez的帖子

匿名段上的boost :: interprocess内存分配器

我正在尝试使用类似mmap的段来分配stl容器上的对象,因为我正在使用boost :: interprocess,它提供了内存映射,分配器和匿名内存映射支持.
有点像这样

我的问题是这里anonymous_shared_memory函数返回的内容看起来是半映射文件和半共享内存(对mmap有意义))虽然这两种样式都与进程间分配器一起使用,但这个样子看起来像缺少一个执行实际块分配的segment_manager. 因为它返回一个已经映射到进程中的高级别,但没有经理,也没有办法让我看到挂钩.
mapped_regionsegment_manager

c++ linux boost multiprocessing interprocess

7
推荐指数
1
解决办法
815
查看次数

Linux,timerfd准确性

我的系统需要至少10毫秒的定时器准确度.
我选择了timerfd,因为它完全适合我,但发现即使时间长达15毫秒也不准确,或者我不明白它是如何工作的.

我测量的时间在10毫秒计时器上高达21毫秒.
我已经整理了一个显示我的问题的快速测试.
这是一个测试:

#include <sys/timerfd.h>
#include <time.h>
#include <string.h>
#include <stdint.h>

int main(int argc, char *argv[]){

    int timerfd = timerfd_create(CLOCK_MONOTONIC,0);
    int milliseconds = atoi(argv[1]);
    struct itimerspec timspec;
    bzero(&timspec, sizeof(timspec));
    timspec.it_interval.tv_sec = 0;
    timspec.it_interval.tv_nsec = milliseconds * 1000000;
    timspec.it_value.tv_sec = 0;
    timspec.it_value.tv_nsec = 1;

    int res = timerfd_settime(timerfd, 0, &timspec, 0);
    if(res < 0){
       perror("timerfd_settime:");
    }
    uint64_t expirations = 0;
    int iterations = 0;
    while( res = read(timerfd, &expirations, sizeof(expirations))){
        if(res < 0){ perror("read:"); continue; }
        if(expirations > 1){ …
Run Code Online (Sandbox Code Playgroud)

c linux timer

6
推荐指数
1
解决办法
1万
查看次数

合并git中的变更集以进行代码审查

我在我的本地git repo上有大约50个相关提交,这个列表我想在代码审查中只显示我的提交.
但是它们与其他人提交混合,并且我的一些提交是对其他人的更正,所以我不想提交提交,因为我会在相同的代码中执行两次,原始和更正.
对我来说最好的事情就是做这样的事情:
git combine-commits 4 9 20 35 67 90 102 > myfile.diff
以这种方式67修复20上的错误,差异显示纠正的版本.

有没有办法解决这个问题?

git diff patch

6
推荐指数
1
解决办法
454
查看次数

Erlang,如何使用依赖项加载应用程序

我的群集中有一些应用程序,我需要在不同的主机上启动其中一些应用程序.

故事是Erlang集群已经在运行,所以尽管每个应用程序都有我的.app资源文件,说明应该在我的应用程序之前启动哪些应用程序,但这只能用于创建启动脚本,而不是在已经运行的情况下启动应用程序节点.

目前我有一个使用应用程序的自定义例程:get_key(应用程序,应用程序)来提取依赖项并在启动给定应用程序之前单独启动它们.

我想知道是否有更好的方法来做到这一点.

erlang startup erlang-otp

6
推荐指数
3
解决办法
4468
查看次数

避免在多线程套接字应用程序中重用相同的fd编号

我有一个异步应用程序执行多个线程在套接字上执行操作,其中调度操作然后异步执行.

我试图避免在第一次操作开始执行之前,一旦在套接字上调度了读操作,套接字被关闭并重新打开(可能是另一个操作中的另一个对等体)的情况,这将最终读取正确的文件描述符但错误的同伴.

问题来了,因为(accept(); close(); accept())在accept()中返回相同的fd,这可能导致上述情况.

我看不到避免它的方法.

任何提示?

c++ sockets linux multithreading

5
推荐指数
1
解决办法
3533
查看次数

C++,多态和迭代器

我想要一个存储接口(抽象类)和一组存储实现(SQLite,MySQL,Memcached ..),用于存储已知类的对象并从存储中检索子集.
对我来说,明确的界面是:

class Storable{int id; blah; blah; blah; string type;};
class Storage{
    virtual Storage::iterator get_subset_of_type(string type) = 0;
    virtual Storage::iterator end)_ = 0;
    virtual void add_storable(Storable storable) = 0;
};
Run Code Online (Sandbox Code Playgroud)

然后创建实现接口的存储实现.现在,我的问题如下:

  • 迭代器不能是多态的,因为它们是按值返回的.
  • 我不能只为我给定的Storage实现子类化Storage :: iterator
  • 我想过有一个包装迭代器,它包装并对存储实现子类的多态类型进行pimpl,但后来我需要使用动态内存并分配到所有地方.

任何提示?

c++ polymorphism iterator class subclass

5
推荐指数
1
解决办法
1747
查看次数

在Debian上为您自己的应用程序添加SNMP支持的最佳方式

我正在使用Debian,我有我们要监控的服务器.
该应用程序是我们的,我们想要导出大约一百个实时计数器用于监控,图形和警报.

我一直在研究Debian的做法,因为我们使用Debian打包来安装应用程序,而Debian使用基于net-snmp的snmpd守护进程来导出SNMP.到目前为止,我看到的每一种方法看起来都非常复杂,从重新编译snmpd到将动态库加载到其中,以及编译一个复制snmpd所做的子代理形式.

虽然所有这些选项让我觉得我应该寻求除SNMP以外的其他东西我不想早点放弃,我想知道是否有人找到了可行的实现.

理想情况下它应该用C或C++编码,因为应用程序是用C++编写的,但我对包装器或其他类型的建议持开放态度.

c c++ linux debian snmp

5
推荐指数
2
解决办法
9583
查看次数

在Python中更改函数实现

我正在编写一个提供一个函数并需要初始化步骤的模块,但是由于我需要在第一次调用时初始化的某些限制,所以我在python中寻找适当的习惯用法,这将允许我摆脱条件.

#with conditional
module.py
initialized = False
def function(*args):
   if not initialized: initialize()
   do_the_thing(*args)
Run Code Online (Sandbox Code Playgroud)

我想用这样的东西摆脱那种条件(它不起作用):

#with no conditional
module.py
def function(*args):
   initialize()
   do_the_thing(*args)
   function = do_the_thing
Run Code Online (Sandbox Code Playgroud)

我意识到我不能只在模块中使用名称并在运行时更改它们,因为使用的模块from module import function永远不会受到function=other_fun模块内部的影响.
那么,有没有任何pythonic成语可以正确的方式做到这一点?

python metaprogramming function

5
推荐指数
1
解决办法
204
查看次数

如何从 pyparsing token 中获取原始文本

我有表单的文本name(sum(value1,sum(value2,value3)), "sumname"),pyparsing 返回适当的标记,但是,我有兴趣获取真实的文本,但我找不到如何获取。

我尝试使用函数 setParseAction ,但由于它只返回字符串和位置,因此我无法处理尾随部分。就像,我只会得到:

"sum(value2,value3)), "sumname")"
"sum(value1,sum(value2,value3)), "sumname")"
"name(sum(value1,sum(value2,value3)), "sumname")"
Run Code Online (Sandbox Code Playgroud)

这并不理想,我不想手动重新解析字符串以获取实际的原始字符串。

我尝试atm的方式是:

tokens = grammar.parseString(target_string)  
print >>sys.stderr, pyparsing.originalTextFor(tokens)
Run Code Online (Sandbox Code Playgroud)

但这实际上并不起作用:

AttributeError: 'NoneType' object has no attribute 'setParseAction'
Run Code Online (Sandbox Code Playgroud)

python pyparsing

5
推荐指数
1
解决办法
2375
查看次数

解锁访问stl vector :: size safeness

我在stl向量上有几个编写器(线程)和一个读者.

正常的写入和读取是互斥保护,但我想避免在我有一个循环上的争用,我想知道vector :: size是否足够安全,我想这取决于实现,但因为通常矢量动态内存是为了存储项目在重新分配期间不应使存储大小的内存无效.

我不介意误报,在大小> 0之后,我实际上会锁定并再次检查,所以如果读取size()而另一个线程写入并不是段错误,那么对我来说它应该足够安全.

c++ multithreading stl

4
推荐指数
1
解决办法
515
查看次数