问题列表 - 第46617页

C++ pthread阻塞队列死锁(我认为)

我遇到了pthreads的问题,我认为我遇到了僵局.我创建了一个我认为正在工作的阻塞队列,但在做了一些测试后我发现如果我尝试取消阻塞在blocking_queue上的多个线程,我似乎陷入僵局.

阻塞队列非常简单,如下所示:

template <class T> class Blocking_Queue
{
public:
    Blocking_Queue()
    {
        pthread_mutex_init(&_lock, NULL);
        pthread_cond_init(&_cond, NULL);
    }

    ~Blocking_Queue()
    {
        pthread_mutex_destroy(&_lock);
        pthread_cond_destroy(&_cond);
    }

    void put(T t)
    {
        pthread_mutex_lock(&_lock);
        _queue.push(t);
        pthread_cond_signal(&_cond);
        pthread_mutex_unlock(&_lock);
    }

     T pull()
     {
        pthread_mutex_lock(&_lock);
        while(_queue.empty())
        {
            pthread_cond_wait(&_cond, &_lock);
        }

        T t = _queue.front();
        _queue.pop();

        pthread_mutex_unlock(&_lock);

        return t;
     }

priavte:
    std::queue<T> _queue;
    pthread_cond_t _cond;
    pthread_mutex_t _lock;
}
Run Code Online (Sandbox Code Playgroud)

为了测试,我创建了4个线程来拉动这个阻塞队列.我向阻塞队列添加了一些print语句,每个线程都进入pthread_cond_wait()方法.但是,当我尝试在每个线程上调用pthread_cancel()和pthread_join()时,程序就会挂起.

我还用一个线程对它进行了测试,它完美无缺.

根据文档,pthread_cond_wait()是一个取消点,因此在这些线程上调用cancel会导致它们停止执行(这只适用于1个线程).但是pthread_mutex_lock不是取消点.可能会在调用pthread_cancel()时发生某些事情,取消的线程在终止之前获取互斥锁并且不解锁它,然后当下一个线程被取消时它无法获取互斥锁和死锁?或者还有别的我做错了.

任何建议都很可爱.谢谢 :)

c++ deadlock pthreads blockingqueue

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

TSQL使用BIGINT进行算术溢出

有人可以为我澄清当我尝试在下面的示例中设置变量@a时,为什么会出现错误?

DECLARE @a BIGINT
SET @a = 7*11*13*17*19*23*29*31
/*
ERROR:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
*/
Run Code Online (Sandbox Code Playgroud)

我现在能想到的是,在内部,SQL开始做数学评估乘法并将临时结果放入INT然后它将它转换为BIGINT.

但是,如果我在我的数字列表中添加1.0*,则没有错误,因此我相信在这段时间内SQL使用float作为临时结果,然后将其转换为BIGINT

DECLARE @b BIGINT
SET @b =   1.0  *  7*11*13*17*19*23*29*31
/*
NO ERROR
*/
Run Code Online (Sandbox Code Playgroud)

坦率地说,我没有看到代码有什么问题...它很简单......

[我正在使用SQL 2008]

[编辑]

感谢Nathan的链接.这是我不知道的好信息,但我仍然不明白为什么我会得到错误,为什么我要做"技巧"来获得这样一个简单的脚本.

这是我应该知道如何作为程序员处理的事情吗?

或者,这是一个错误,如果是这样,我会考虑关闭这个问题.

sql t-sql

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

有人可以解释为什么这是传递一个对象

我有类似以下的东西..

$(document).ready(function() {
    $('#doReport').click(doReport);
});

function doReport(type) {
    if (type === undefined) {
        type = 'blah';
    }
    alert (type);
}
Run Code Online (Sandbox Code Playgroud)

如果我doReport()在控制台中运行或在javascript中独立运行,它将返回'blah'(如预期的那样),显然如果我调用doReport('wibble');它会返回'wibble',如你所料.

但是如果我通过单击带有ID doReport的元素来运行它(利用我在.ready中设置的绑定),它将返回[object Object]

我不明白为什么会这样.

javascript jquery

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

Ninject如何在ASP.NET MVC中创建控制器?

这可能是一个愚蠢的问题,但我正在寻找Ninject来源,并没有看到NInject注册自己的控制器工厂.我也没有IControllerFactoryNinject.Web.Mvc集会中看到任何课程.我错过了什么吗?Ninject如何创建控制器并将参数注入构造函数?

asp.net-mvc ninject ninject-2 ninject.web.mvc asp.net-mvc-3

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

Sequence不包含LINQ FirstOrDefault的元素

LINQ FirstOrDefault我得到'Sequence contains no elements'.

int? locationId = _ctx.m_locations.FirstOrDefault(
                       l => l.name.ToLower() == countyOrTown.ToLower()
                  ).location_key;
Run Code Online (Sandbox Code Playgroud)

我认为FirstOrDefault的重点是,如果数据库中没有条目并且只返回null,它不会引发异常?

.net c# linq

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

使用JMeter进行测试:如何每秒运行N个请求

我需要测试我们的系统是否每秒可以执行N个请求.从技术上讲,它是对一个API的2个请求,对另一个API的2个请求,以及对第三个请求的6个请求.但重要的是它们应该同时发生 - 每秒10个请求.因此,在JMeter中我创建了三个线程组,首先定义了线程数1,并且加速时间为0.第二个线程组是相同的,第三个线程组定义了线程数6和加速时间0.但是这并不能保证它每秒运行它们 如何模仿它?我如何看待结果 - 如果它能够执行或不执行?

谢谢!

jmeter stress-testing load-testing performance-testing

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

使用perl完全处理能力

我有一个运行正确的perl脚本,但它只使用了我的2核CPU的1核,我怎样才能利用所有核心.

我知道我可以使用threads-> new()创建线程.但我如何适应这样的事情:

my $twig= new XML::Twig::XPath(TwigRoots => {TrdCaptRpt => \&top_level});
$twig->parsefile($file);
Run Code Online (Sandbox Code Playgroud)

子程序被其他东西调用的地方.

perl multithreading

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

"// TODO实现了一个完整的类头"

"// TODO实现了一个完整的类头",用于我的C#类的最终项目,这是该项目的TODO之一.我不完全确定这意味着什么.

包含它的程序的顶部如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//TODO implement a complete class header

namespace Payroll
{


 [Serializable]


    public abstract class Employee:IPayable
    {
        #region "Variable Declarations"

        //create an enumeration that keeps track of the type
        public enum Type
        {
            Hourly = 1,
            Salary = 2,
            Contract = 3,
            None = 4
        };
Run Code Online (Sandbox Code Playgroud)

c# header

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

TPL TaskFactory.FromAsync vs任务与阻塞方法

我想知道在使用TPL TaskFactory.FromAsync和使用TaskFactory.StartNew阻塞版本的方法之间是否存在性能影响.我正在编写一个TCP服务器,它将支持不超过100个并发连接.在使用第一个选项编写代码并使用continue来链接多个读写操作之后,我留下了丑陋,难以调试的代码.

我相信用同步版本编写代码然后用Task包装它会降低复杂性并提高可测试性,但是我担心这样做的性能影响.

例如,这两个调用之间是否存在任何性能差异:

NetworkStream stream;
byte[] data;
int bytesRead;

//using FromAsync
Task<int> readChunk = Task<int>.Factory.FromAsync (
      stream.BeginRead, stream.EndRead,
      data, bytesRead, data.Length - bytesRead, null);

//using StartNew with blocking version
Task<int> readChunk2 = Task<int>.Factory.StartNew(() => 
      stream.Read(data, bytesRead, data.Length - bytesRead));
Run Code Online (Sandbox Code Playgroud)

networkstream task task-parallel-library taskfactory c#-4.0

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

DPI和PPI | DPI或PPI

DPI和PPI之间有什么不同吗?是真的吗:Dot = Pixel?最后,C#.net中的DpiX和DpiY是什么?我们怎样才能改变它们?

c# windows graphics

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