小编Lær*_*rne的帖子

如何调试罕见的死锁?

我正在尝试调试很少有死锁的自定义线程池实现.所以我不能使用像gdb这样的调试器,因为我在遇到死锁之前点击了100次"启动"调试器.

目前,我在shell脚本的无限循环中运行线程池测试,但这意味着我看不到变量等等.我正在尝试std::cout数据,但这会减慢线程并减少死锁的风险,这意味着我可以在获取消息之前等待1小时的无限.然后我没有得到错误,我需要更多的消息,这意味着再等一个小时......

如何有效地调试程序,以便它一遍又一遍地重启直到它死锁?(或者我应该用所有代码打开另一个问题以获得一些帮助?)

先感谢您 !

奖金问题:如何检查一切顺利std::condition_variable?您无法确定哪个线程处于睡眠状态,或者条件是否出现竞争wait条件.

c++ multithreading deadlock threadpool c++11

16
推荐指数
2
解决办法
6095
查看次数

如何在C中用GTK3创建自定义小部件?

你知道如何在GTK 3中创建自定义小部件吗?我试图在C中继承GtkDrawingArea几个小时.Gnome.org仅提供了关于如何子类化G_OBJECT的简明教程.我的问题是,G_Object/ GTK没有查看我的自定义StrokerNodalContainer为的一个子类GtkWidget与铸造时GTK_WIDGET,甚至强硬我的定义struct包含了这样一行:

GtkDrawingArea parent_instance;
Run Code Online (Sandbox Code Playgroud)

它说 :

invalid cast from 'StrokerNodalContainer' to 'GtkWidget'
Run Code Online (Sandbox Code Playgroud)

如果您怀疑其他可能有问题,请输入完整的代码.它是最小的所以我没有看到外部代码搞乱的任何理由.

司炉,nodalcontainer.h

#ifndef __STROKER_NODALCONTAINER_H__
#define __STROKER_NODALCONTAINER_H__

#ifndef NO_INCLUDE_WITHIN_HEADERS
#include <gtk/gtk.h>
#endif

#define STROKER_TYPE_NODAL_CONTAINER                  (stroker_nodal_container_get_type ())
#define STROKER_NODAL_CONTAINER(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainer))
#define STROKER_NODAL_CONTAINER_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST  ((klass), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainerClass))
#define STROKER_IS_NODAL_CONTAINER(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), STROKER_TYPE_NODAL_CONTAINER))
#define STROKER_IS_NODAL_CONTAINER_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE  ((klass), STROKER_TYPE_NODAL_CONTAINER))
#define STROKER_NODAL_CONTAINER_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS  ((obj), STROKER_TYPE_NODAL_CONTAINER, StrokerNodalContainerClass))

typedef struct _StrokerNodalContainer      StrokerNodalContainer;
typedef struct _StrokerNodalContainerClass StrokerNodalContainerClass;

struct _StrokerNodalContainer
{
    GtkDrawingArea parent_instance; …
Run Code Online (Sandbox Code Playgroud)

c gtk gobject gtk3

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

我可以将“extern template”放入头文件中吗?

将外部模板放入头文件中,然后在单元编译文件中进行显式模板实例化是否有效?

例如,在编译示例中g++,这是否可以避免nothing<int>两次实例化?为什么没有人这样写,而更喜欢extern template在每个 .cpp 文件中复制该行?

A.hpp:

#ifndef HEADERC_A
#define HEADERC_A

template< typename T > struct nothing {};
extern template struct nothing<int>;

#endif
Run Code Online (Sandbox Code Playgroud)

A.cpp:

#include "A.hpp"

template struct nothing<int>;
Run Code Online (Sandbox Code Playgroud)

主要.cpp:

#include "A.hpp"
#include <iostream>

int main()
{
    nothing<int> n;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

如何在Spark中使用大量数据

我正在使用python中的spark,尝试将PDF文件映射到一些自定义解析。目前,我正在使用加载PDFS pdfs = sparkContext.binaryFiles("some_path/*.pdf")。我将RDD设置为可在磁盘上缓存pdfs.persist( pyspark.StorageLevel.MEMORY_AND_DISK )

然后,我尝试映射解析操作。然后保存一个泡菜,但是它失败并在堆中出现内存不足错误。请问你能帮帮我吗?

这是我所做的简化代码:

from pyspark import SparkConf, SparkContext
import pyspark

#There is some code here that set a args object with argparse.
#But it's not very interesting and a bit long, so I skip it.

def extractArticles( tupleData ):
    url, bytesData = tupleData
    #Convert the bytesData into `content`, a list of dict
    return content

sc = SparkContext("local[*]","Legilux PDF Analyser")

inMemoryPDFs = sc.binaryFiles( args.filePattern )
inMemoryPDFs.persist( pyspark.StorageLevel.MEMORY_AND_DISK )


pdfData = inMemoryPDFs.flatMap( extractArticles ) …
Run Code Online (Sandbox Code Playgroud)

apache-spark

5
推荐指数
0
解决办法
4753
查看次数

`_call`在我的Lua代码中不起作用

我认为一个简单的虚拟示例文件解释的不仅仅是长词

t = {}
t.__call = print
t.__call(1)
t(2)
Run Code Online (Sandbox Code Playgroud)

根据该文件,因为t是一张桌子,一个电话t,想t(2),应该被重定向到一个呼叫t.__call,像t.__call(2). t.__call工作正常,没问题,但"语法糖"没有.以下是上述代码的输出:

1
lua: test.lua:4: attempt to call global 't' (a table value)
stack traceback:
        test.lua:4: in main chunk
        [C]: in ?
Run Code Online (Sandbox Code Playgroud)

我错过了什么?为什么不t(2)转换成t.__call(2)

lua lua-table

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

如何理解C/C++宏?

我有一个宏

DECLARE_SOMETHING(X, Y) {X, Y}
Run Code Online (Sandbox Code Playgroud)

由于宏回调,我想分两步调用

CURRIED_DECLARE_SOMETHING(X)(Y)
Run Code Online (Sandbox Code Playgroud)

但是我该怎么做呢?我真的不介意是否DECLARE_SOMETHING真的存在,我只是想写一些简单{X, Y}的声明,但称之为咖喱.

我尝试过这样的东西,但我不知道如何???用赋予Y的值替换它.

#define CURRY(BODY, Y) BODY(Y)
#define CURRIED_DECLARE_SOMETHING(X) CURRY( DECLARE_SOMETHING(X, Y), ??? )
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢.

c c++ macros

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

如何在 QML 中直接在列表中声明项目?

我在 QML 中有一个Dummy对象:

import QtQuicks 2.7
Item { property int foo: 0 }
Run Code Online (Sandbox Code Playgroud)

另一个对象需要创建此类对象的实例列表。但我该如何声明呢?在列表中使用直接 QML 声明不起作用:

import QtQuicks 2.7

Item {
    property var fools: [
        Dummy {foo: 1},
        Dummy {foo: 2},
        Dummy {foo: 3}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我收到错误Cannot assign multiple values to a singular property

如何正确声明假人列表?

qt qml qt5

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

为什么模板类型扣除失败?

为什么在下面的代码段,并在模板类型不能自动从最后一个参数就像在做推断,std::condition_variable::wait

template< typename Predicate >
    //requires Truth< Predicate >
class lock_monitor_guard
{
public:
    lock_monitor_guard( std::mutex& mutex, std::condition_variable& monitor, Predicate predicate );
    ~lock_monitor_guard();

private:
    std::unique_lock<std::mutex> lock;
    std::condition_variable& monitor;
};

template< typename Predicate >
    //requires Truth< Predicate >
lock_monitor_guard<Predicate>::lock_monitor_guard( std::mutex& mutex, std::condition_variable& monitor, Predicate predicate )
    : lock( mutex ), monitor( monitor )
{
        monitor.wait<Predicate>( lock, predicate );
}

template< typename Predicate >
    //requires Truth< Predicate >
lock_monitor_guard<Predicate>::~lock_monitor_guard()
{
        lock.unlock();
        monitor.notify_one();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建类似的行时lock_monitor_guard guard( jobs_mutex, jobs_monitor, ([]()->bool{return true;}) ); …

c++ templates condition-variable c++11 type-deduction

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

为什么不推荐使用stdbool.h?

C标准现在说:

取消定义和重新定义宏bool,true和false的能力是一个过时的功能,可能会在将来的版本中删除.

也就是说,stdbool.h已弃用.但没有理由,我找不到.他们是否打算将bool添加为基本类型,还是其他什么?

如果你碰巧知道为什么这个被弃用了,谢谢你告诉我!

c c11 stdbool

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

constexpr构造函数不能在constexpr构造函数中使用

我想unique_ptr用一个特殊的析构函数重新定义.因此,我使用下面的代码,我试图模仿一些构造函数unique_ptr.不幸的是,constexpr构造者拒绝构建,我不知道为什么.

class job_ptr : public unique_ptr<Job>
{
public:
    constexpr job_ptr()
        : unique_ptr<Job>(), sequencer( nullptr ) {}
    constexpr job_ptr( nullptr_t )
        : unique_ptr<Job>( nullptr ), sequencer( nullptr ) {}
private:
    FIFOSequencer* sequencer;
};
Run Code Online (Sandbox Code Playgroud)

初始化列表中的两个构造函数都被声明constexpr,但是clang++考虑constexpr constructor never produces a constant expression因为non-literal type 'unique_ptr<Job>' cannot be used in a constant expression.这意味着什么? constexpr构造函数不能在constexpr构造函数中使用?

感谢您的任何帮助.

c++ constructor unique-ptr constexpr c++11

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

python __delete__ 不起作用

我正在尝试这个简单的python代码:

class A:
  def __init__( self ):
    self.a = { 'k' : 'kk' }
  def __delete__( self, key ):
    del self.a[key]
Run Code Online (Sandbox Code Playgroud)

这个简单的类不起作用。

>>> a = A()
>>> del a['k']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'A' object does not support item deletion
Run Code Online (Sandbox Code Playgroud)

那么我应该如何在 python 中正确实现项目删除?感谢您的帮助。

python python-3.x

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