问题列表 - 第24825页

TimeZoneInfo与Olson数据库

TimeZoneInfo和Olson数据库是否对时区使用相同的标识符?

我从GeoNames服务(基于Olson数据库)获得时区ID,并希望检索该时区的日光保存信息.

.net timezone datetime

10
推荐指数
1
解决办法
3509
查看次数

如何使用pthread_atfork()和pthread_once()重新初始化子进程中的互斥锁

我们有一个C++共享库,它使用ZeroC的Ice库来实现RPC,除非我们关闭Ice的运行时,否则我们观察到子进程挂在随机互斥锁上.Ice运行时启动线程,具有许多内部互斥锁并保持打开文件描述符到服务器.

另外,我们有一些我们自己的互斥体来保护我们的内部状态.

我们的共享库被数百个内部应用程序使用,因此我们无法控制进程何时调用fork(),因此我们需要一种方法来安全地关闭Ice并在进程分叉时锁定我们的互斥锁.

pthread_atfork()上阅读关于处理互斥锁和内部状态的POSIX标准:

或者,某些库可能只能提供一个子例程,它将库中的互斥锁和所有关联状态重新初始化为某个已知值(例如,最初执行映像时的状态).但是,这种方法是不可能的,因为如果互斥锁或锁仍然被锁定,则允许实现失败*_init()和*_destroy()调用互斥锁和锁.在这种情况下,子例程无法重新初始化互斥锁和锁.

在Linux上,此测试C程序从子pthread_atfork()处理程序中的pthread_mutex_unlock()返回EPERM.Linux需要将_NP添加到PTHREAD_MUTEX_ERRORCHECK宏以便进行编译.

这个程序是从这个好的线程链接的.

鉴于在解锁或破坏子进程中的互斥锁在技术上是不安全或合法的,我认为最好有指向互斥锁的指针,然后让子进程在堆上创建新的pthread_mutex_t并让父进程的互斥锁独立,从而拥有小内存泄漏.

唯一的问题是如何重新初始化库的状态,我正在考虑重新设置pthread_once_t.也许是因为POSIX有一个pthread_once_t的初始化程序,它可以重置为初始状态.

#include <pthread.h>
#include <stdlib.h>
#include <string.h>

static pthread_once_t once_control = PTHREAD_ONCE_INIT;

static pthread_mutex_t *mutex_ptr = 0;

static void
setup_new_mutex()
{
    mutex_ptr = malloc(sizeof(*mutex_ptr));
    pthread_mutex_init(mutex_ptr, 0);
}

static void
prepare()
{
    pthread_mutex_lock(mutex_ptr);
}

static void
parent()
{
    pthread_mutex_unlock(mutex_ptr);
}

static void
child()
{
    // Reset the once control.
    pthread_once_t once = PTHREAD_ONCE_INIT;
    memcpy(&once_control, &once, sizeof(once_control));
}

static void
init()
{
    setup_new_mutex();
    pthread_atfork(&prepare, &parent, &child); …
Run Code Online (Sandbox Code Playgroud)

c multithreading pthreads ice

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

编译时进行C++类型检查

所有.我是C++的新手,我正在用C++编写一个小型库(主要用于我自己的项目).在设计类型层次结构的过程中,我遇到了定义赋值运算符的问题.

我采用了本文最终达到的基本方法,即对于MyClass从类派生的层次结构中的每个类,Base您定义了两个赋值运算符,如下所示:

class MyClass: public Base {
public:
    MyClass& operator =(MyClass const& rhs);
    virtual MyClass& operator =(Base const& rhs);
};

// automatically gets defined, so we make it call the virtual function below
MyClass& MyClass::operator =(MyClass const& rhs);
{
    return (*this = static_cast<Base const&>(rhs));
}

MyClass& MyClass::operator =(Base const& rhs);
{
    assert(typeid(rhs) == typeid(*this)); // assigning to different types is a logical error
    MyClass const& casted_rhs = dynamic_cast<MyClass const&>(rhs);
    try {
        // allocate new …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism boost typechecking assignment-operator

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

允许成员为const,同时仍然在类上支持operator =

我班上有几个成员,const因此只能通过初始化列表进行初始化,如下所示:

class MyItemT
{
public:
    MyItemT(const MyPacketT& aMyPacket, const MyInfoT& aMyInfo)
        : mMyPacket(aMyPacket),
          mMyInfo(aMyInfo)
    {
    }

private:
    const MyPacketT mMyPacket;
    const MyInfoT mMyInfo;
};
Run Code Online (Sandbox Code Playgroud)

我的类可以在我们的一些内部定义的容器类(例如向量)中使用,并且这些容器需要operator=在类中定义.

当然,我operator=需要做这样的事情:

MyItemT&
MyItemT::operator=(const MyItemT& other)
{
    mMyPacket = other.mPacket;
    mMyInfo = other.mMyInfo;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,因为mMyPacket并且mMyInfoconst成员.

除了让这些成员不是const(我不想做),关于如何解决这个问题的任何想法?

c++ const operators

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

什么是机器学习?

  • 什么是机器学习
  • 机器学习代码有什么作用?
  • 当我们说机器学习时,它是修改自己的代码还是修改历史(数据库),它将包含给定输入集的代码体验?

machine-learning definition

90
推荐指数
9
解决办法
4万
查看次数

你可以在iPhone或机器人上运行一个搅拌机游戏吗?

我有一部iPhone并且正在使用Droid,并且想知道搅拌机游戏是否可以在其中任何一个上运行.我已经做了一个游戏,并希望能够在我的手机上使用它.

iphone android blender

0
推荐指数
1
解决办法
8353
查看次数

堆栈是否有一个异常安全的方法来返回和删除带有移动语义的顶部元素?

在回答一个关于std::stack::pop() 我声称原因pop没有返回的问题的原因是出于异常安全原因(如果复制构造函数抛出会发生什么).

@Konrad评论说现在有了移动语义,这已经不再适用了.这是真的?

AFAIK,移动构造函数可以 throw,但也许与noexcept它一起仍然可以实现.

对于奖励积分,此操作可以提供哪些线程安全保证?

c++ exception-safe move-semantics c++11

10
推荐指数
1
解决办法
664
查看次数

Lua - Reflection - 获取对象上的函数/字段列表?

我是Lua的新手,并且在程序的alpha版本中将Lua作为脚本语言处理.开发人员没有响应,我需要获取一些可以从Lua代码访问的C++对象提供的函数列表.

有没有简单的方法来查看这些对象公开的字段和功能?

c++ reflection lua function object

28
推荐指数
3
解决办法
3万
查看次数

按位间隔算法

我最近在D新闻组上读了一个有趣的帖子,基本上要求,

给定两个(签署)整数一个 ∈[ 分钟,最大值 ],b ∈[ b 分钟,b 最大值 ],什么是最紧密的间隔一个 | b

我认为如果区间算术可以应用于一般的位运算符(假设无限位).按位NOT和移位是微不足道的,因为它们只对应于-1- x和2 n x.但由于按位和算术属性的混合,按位-AND/OR更加棘手.

是否有多项式时间算法来计算按位AND/OR的间隔?


注意:

  • 假设所有按位运算都以线性时间(位数)运行,并且测试/设置位是恒定时间.
  • 蛮力算法以指数时间运行.
  • 因为~(a | b) = ~a & ~b,解决按位AND和-NOT问题意味着按位OR完成.
  • 虽然该线程的内容表明min { a | b } = max(a min,b min),它不是最严格的约束.考虑一下[2, 3] | [8, 9] = [10, 11].)
  • 实际上处理无符号算术就足够了,因为我们可以将一个有符号的区间分成负的和非负的子集,并且使用de Morgan定律和交换性只需要解决非负区间的按位AND,-OR和-AND-NOT情况.

language-agnostic algorithm bit-manipulation

17
推荐指数
1
解决办法
1810
查看次数

jRuby和Matz的Ruby在同一台机器上?

是否可以在同一台机器上运行jRuby和native ruby​​?

例如,在它下面安装rake或gem它找到了Matz Ruby扩展/usr/bin/gem或者/usr/bin/rake

MRI宝石和jruby宝石混合在一起.

这个星座有经验吗?

ruby linux jruby

3
推荐指数
1
解决办法
545
查看次数