标签: blocking

信号量排队

我正在扩展信号量的功能.当我意识到我不知道实际信号量的实现并确保我的代码正确运行时,我遇到了障碍,我需要知道这一点.

我知道信号量通过阻塞正在等待它的线程来调用sem_wait()而另一个线程当前已将其锁定.然后阻塞该线程,然后将其放入该信号量的等待列表中.

我的问题与sem_post()上发生的事情有关.是否将下一个线程从等待列表中拉出,设置为锁定线程,并允许解除阻塞?或者发布完全不同的方案?

谢谢!

c multithreading semaphore system blocking

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

Process.Start在某些客户端上随机阻塞/挂起

(有一个非常相似的话题从未得到解决:这里)

我们在几个客户端上运行了一个大应用程序,但最近我的一些代码停止了工作.添加一些调试代码,我发现代码停止在()调用的Process.Start(没有的ShellExecute = true设置).

电话很简单

 Process.Start(new ProcessStartInfo("program"))    
Run Code Online (Sandbox Code Playgroud)

在BackgroundWorker线程中.

"程序"应用程序会执行它应该执行的操作并退出.

我们的应用程序继续,因为线程在后台,但如果应用程序在GUI线程上运行另一个Process.Start,则应用程序会锁定.如果使用X按钮关闭应用程序,则应用程序仍显示在taskmanager中,因为该线程仍被Process.Start阻止.

问题是这种行为无法再现.它在一些客户端计算机上随机发生.

使Process.Start()挂起会发生什么?(Program.Main标有[STAThread])

我目前刚刚做了一个解决方法,在自己的线程中启动Process.Start(),如果它还没有返回,则在5秒后终止它.但是对于等待代码返回的用户来说这是5秒钟(我不知道我可以设置超时有多低,因为在某些情况下我需要Process.Start()的返回值).

可以有防病毒软件干扰吗?(客户端安装了Symantec AV)

更新:我假设当我做了一个

ProcessStartInfo psi = new ProcessStartInfo("ping", "localhost");
Run Code Online (Sandbox Code Playgroud)

默认情况下psi.UseShellExecute为FALSE ...这是不正确的.它默认为TRUE.这是正常的吗?

c# blocking process.start

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

Javascript - setTimeout关闭问题

我正在努力解决下面的代码.我尝试了很多不同的方法,但我最终得到了两个不正确的结果之一.

for(i = 0; i < result.length; i++) {

    var tmpBlockInfo = {
        size: worldTest.data[0].size,
        xStartPixel :  result[i].x * worldTest.data[0].size,
        yStartPixel : result[i].y * worldTest.data[0].size,
        blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
    }

    var tmpFunc = function(){
        worldTest.fillBlock(tmpBlockInfo, 157, 152, 124,  255)
    };

    var t = setTimeout(function(){
        tmpFunc()
    } , 500 * i);
}
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是tmpBlockInfo总是得到最后的结果[i] .x/result [i] .y.因此,当超时运行函数时,我正在假设它看到了什么结果[i] .x/result [i] .y在循环之后保持开启(而不是将其作为"新"变量传递)

我认为将它放入函数会解决闭包问题,但没有运气.

还尝试过:

for(i = 0; i < result.length; i++) {

    var tmpBlockInfo = {
        size: …
Run Code Online (Sandbox Code Playgroud)

javascript closures for-loop blocking settimeout

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

C#异步串口读取

我有一个类,它使用C#中的DataReceived事件处理程序从串口读取.当我收到数据时,我知道标题将有5个字节,所以我不想对数据做任何事情,直到我至少有.我目前的代码如下:

while (serialPort.BytesToRead<5)
{
//Do nothing while we have less bytes than the header size
}

//Once at least 5 bytes are received, process header
Run Code Online (Sandbox Code Playgroud)

据我了解,这段代码是阻塞的,需要改进.我正在寻找有关如何做到这一点的建议.DataReceived事件处理程序中的另一个事件处理程序是否合适?

asynchronous serial-port blocking

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

Java阻止列表实现

我在SO和Google上搜索了这个问题的答案,但到目前为止找不到合适的解决方案.

我目前正在处理图形路由问题中的LayerManager.经理负责提供和重置固定的图层集.

我想用阻塞列表实现Consumer-Producer模式,以便在没有可用的自由层的情况下阻止传入路由请求.到目前为止,我只发现了阻塞队列,但由于我们不需要FIFO,LIFO但随机访问队列并不真正起作用.为了更精确一点,这样的事情应该是可能的:

/* this should be blocking until a layer becomes available */
public Layer getLayer(){ 

    for ( Layer layer : layers ) {
        if ( layer.isUnused() && layer.matches(request) )
            return layers.pop(layer);
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

java list blocking

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

为什么cpu绑定更好,阻塞I/O和I/O绑定更好,非阻塞I/O.

有人告诉我,对于I/O绑定的应用程序,非阻塞I/O会更好.对于CPU绑定应用程序,阻塞I/O要好得多.我找不到这种说法的理由.试过谷歌,但很少有文章只涉及这个话题没有太多细节.有人可以提供深度理由吗?

有了这个,我想清楚自己,非阻塞I/O的缺点是什么.

通过另一个线程会后在这里,一个原因,我可能涉及在外面是如果I/O过程是沉重得那么只有我们使用非阻塞I/O可以看到显著的性能提升.它还指出,如果I/O操作的数量很大(典型的Web应用程序场景),其中有许多请求寻找I/O请求,那么我们也看到使用非阻塞I/O的重大改进.

因此,我的问题归结为以下列表:

  1. 在CPU密集型应用程序的情况下,最好是启动线程池(或scala的executionContext)并在线程池的线程之间划分工作.(我想它肯定比产生自己的线程和手动划分工作更有优势还使用asyn未来概念,甚至可以使用回调返回CPU密集型工作,从而避免与阻塞多线程相关的问题?).此外,如果存在足够快的I/O,则使用线程池本身的线程上的阻塞原则来执行I/O. 我对吗?

  2. 在技​​术上使用非阻塞I/O实际上有什么缺点或开销?如果I/O足够快或者需要的I/O操作非常少,为什么我们看不到使用非阻塞I/O会带来多大的性能提升?最终它是处理I/O的操作系统.无论I/O的数量是大还是小,让操作系统处理这种痛苦.是什么让这里有所不同.

nonblocking blocking cpu-speed

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

IE8阻止JavaScript Cookie

这是一个让我循环的人.我想设置一个简单的cookie,它有一个名字:IE8上的值对.在FF上测试,它工作正常.IE8一直阻止它.

我已经阅读了有关P3P的内容并创建了一个基本的P3P文档,没有IBM工具报告的错误,并在所有页面上添加了以下内容:

<meta http-equiv="P3P" CP="CAO DSP COR PSDa CONi TELi OUR STP COM NAV"><link rel="P3Pv1" href="/w3c/p3p.xml"></link>
Run Code Online (Sandbox Code Playgroud)

我用来设置cookie的代码如下:

function setCompatibilityCookie(c_name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie= c_name + "=" + escape(value) + ((expiredays==null) ? "" : ";expires=" + exdate.toUTCString());}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么IE8阻止我设置这个cookie?

谢谢,Schalk

javascript cookies blocking internet-explorer-8

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

(python)matplotlib pyplot show()..阻塞与否?

show()一遍又一遍地遇到这个麻烦,我确信我做错了但不确定做出我想要的'正确'方法.

并且[我认为]我想要的是在主线程中阻塞直到GUI线程中发生事件的某种方式,这样的事情第一次起作用:

from matplotlib import pyplot as p
from scipy import rand

im = (255*rand(480,640)).astype('uint8')
fig = p.figure()
ax = fig.add_subplot(111)
ax.imshow(im)

# just any mutable container for storing a click
s = [-1, -1]

def onclick(event):
  if event.xdata is not None and event.ydata is not None:
    s[0] = event.xdata
    s[1] = event.ydata
    p.close()

cid = fig.canvas.mpl_connect('button_press_event', onclick)
p.show()
print s
Run Code Online (Sandbox Code Playgroud)

p.show()块,直到p.close()被调用的事件处理程序.但是当第二次运行相同的代码时,它会越过p.show()并打印原始代码s, [-1, -1].

我已阅读有关是否p.show()可以或应该从同一程序中多次调用的相互矛盾的信息.它似乎被设计为使用一次,并且只在脚本结束时使用一次.其他用例似乎以pyplot某种方式破坏(状态机?).

我试图使用 …

python events matplotlib blocking

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

在IE中阻止脚本

我有一个很好看的花哨脚本,但不是必不可少的惊喜,不能与IE玩得很好.我怎么'为IE评论'?

我知道我可以使用以下内容包含 IE语句,但如何排除它们?

<!--[if IE 6]>
Special instructions for IE 6 here
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

javascript internet-explorer blocking

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

如何阻止操作直到满足条件?

我正在运行此代码,它使用了相当数量的CPU,即使它在大多数时间都没有做任何事情.

while (this.IsListening)
{
    while (this.RecievedMessageBuffer.Count > 0)
    {
        lock (this.RecievedMessageBuffer)
        {
            this.RecievedMessageBuffer[0].Reconstruct();
            this.RecievedMessageBuffer[0].HandleMessage(messageHandler);
            this.RecievedMessageBuffer.RemoveAt(0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在满足条件之前阻止的最佳方法是什么?

c# blocking

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