我正在尝试调试很少有死锁的自定义线程池实现.所以我不能使用像gdb这样的调试器,因为我在遇到死锁之前点击了100次"启动"调试器.
目前,我在shell脚本的无限循环中运行线程池测试,但这意味着我看不到变量等等.我正在尝试std::cout数据,但这会减慢线程并减少死锁的风险,这意味着我可以在获取消息之前等待1小时的无限.然后我没有得到错误,我需要更多的消息,这意味着再等一个小时......
如何有效地调试程序,以便它一遍又一遍地重启直到它死锁?(或者我应该用所有代码打开另一个问题以获得一些帮助?)
先感谢您 !
奖金问题:如何检查一切顺利std::condition_variable?您无法确定哪个线程处于睡眠状态,或者条件是否出现竞争wait条件.
你知道如何在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) 将外部模板放入头文件中,然后在单元编译文件中进行显式模板实例化是否有效?
例如,在编译示例中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) 我正在使用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) 我认为一个简单的虚拟示例文件解释的不仅仅是长词
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)?
我有一个宏
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)
任何帮助,将不胜感激.
谢谢.
我在 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
如何正确声明假人列表?
为什么在下面的代码段,并在模板类型不能自动从最后一个参数就像在做推断,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标准现在说:
取消定义和重新定义宏bool,true和false的能力是一个过时的功能,可能会在将来的版本中删除.
也就是说,stdbool.h已弃用.但没有理由,我找不到.他们是否打算将bool添加为基本类型,还是其他什么?
如果你碰巧知道为什么这个被弃用了,谢谢你告诉我!
我想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构造函数中使用?
感谢您的任何帮助.
我正在尝试这个简单的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 中正确实现项目删除?感谢您的帮助。
c++ ×5
c++11 ×4
c ×3
templates ×2
apache-spark ×1
c11 ×1
constexpr ×1
constructor ×1
deadlock ×1
gobject ×1
gtk ×1
gtk3 ×1
lua ×1
lua-table ×1
macros ×1
python ×1
python-3.x ×1
qml ×1
qt ×1
qt5 ×1
stdbool ×1
threadpool ×1
unique-ptr ×1