问题列表 - 第20551页

在运行时选择互斥锁或虚拟互斥锁

我有一个在几个项目之间共享的类,它的一些用途是单线程的,有些是多线程的。单线程用户不想要互斥锁的开销,多线程用户不想自己做锁,希望能够有选择地运行在“单线程模式”。所以我希望能够在运行时在真实和“虚拟”互斥体之间进行选择。

理想情况下,我会shared_ptr<something>分配一个真实或虚假的互斥对象。然后我会“锁定”它而不考虑其中的内容。

unique_lock<something> guard(*mutex);
... critical section ...
Run Code Online (Sandbox Code Playgroud)

现在有一个signals2::dummy_mutex但它不与boost::mutex.

那么,在不使锁定/保护代码比上面的示例更复杂的情况下,在真实互斥锁和虚拟互斥锁(signals2 中的互斥锁或其他)之间进行选择的优雅方法是什么?

而且,在您指出替代方案之前:

  • 我可以在编译时选择一个实现,但预处理器宏很难看,而且维护项目配置对我们来说很痛苦。
  • 多线程环境中类的用户不想承担锁定类使用的责任,而不是让类在内部进行自己的锁定。
  • “线程安全包装器”涉及的 API 和现有用法太多,无法成为实用的解决方案。

c++ multithreading mutex boost-thread

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

需要在C++中解析字符串的基本帮助

C++不是我的首选语言.

我有一个文件包含这个:

e 225,370 35,75
Run Code Online (Sandbox Code Playgroud)

我想将e,225,370,35和75彼此分成char和ints,但我遇到了麻烦.我尝试了在网上和我的C++书中找到的所有内容,但仍然没有成功.请帮忙.

我会更容易用Java做这件事.

c++ file-io

14
推荐指数
2
解决办法
588
查看次数

将Clojure集成到现有的Java项目中?

如何获取现有的大型Java项目并开始添加Clojure模块?例如,在下面的代码中,我想在Java中提供以下函数:state?,zip?,state-list,zipcode-list.两个谓词将返回一个布尔值,但"getters"将返回数组.

(def *states* (list "NJ" "NY" "CA"))
(def *zipcodes*  (list 12345 54343 98765))

(defn member [x sq]
  (if (seq sq)
    (if (= x (first sq))
      sq
      (recur x (rest sq)))))

(defn state? [aState]
  (not (= (member aState *states*) nil)))

(defn zip? [aZip]
  (not (= (member aZip *zipcodes*) nil)))

(defn state-list []
  *states*)

(defn zipcode-list []
  *zipcodes*)
;; ---------------
(state? "AA")
(state? "CA")
(zip? 11111)
(zip? 12345)

clojure

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

string.format难题

对我来说,以下简单的string.format()不起作用!!

return string.format(Resources.ABCSTRING, fieldName, fieldType);
Run Code Online (Sandbox Code Playgroud)

Resouces.ABCSTRING在哪里

    {1} _{0};
    internal {1} {0}
    {
        get { return _{0}; }
        set
        {
            _{0} = value;
            UpdateRowValue(myObj, "{0}", value);
        }

    }
    internal void SetNull{0}()
    {
        UpdateRowValue(myObj, "{0}", DBNull.Value);
    }
Run Code Online (Sandbox Code Playgroud)

这显然是基本的东西,但我没有看到它!任何帮助?

c#

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

如果在vim中写入只读文件,如何在perforce中自动打开文件进行编辑?

这非常类似于:

Vim自动命令:写一个只读文件?

除了那里提供的解决方案之外,我希望vim仅在文件仍然是只读时才要求确认.

换句话说,如果我这样做:w,我不希望vim说该文件是只读的.它应该使用perforce自动打开文件进行编辑,并且只有当文件仍然是只读时才应该请求确认.

vim perforce

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

ASP.NET - IHttpModule.BeginRequest触发2X,Application_BeginRequest触发1X

我正在运行VS 2008和.NET 3.5 SP1.

我想在我的ASP.NET应用程序中的HttpModule中实现命中跟踪.我想,很简单.但是,我的HttpModule的BeginRequest事件对每个页面命中都会触发两次.该网站现在非常简单......没有安全性,只需要一些数据库工作.应该每页登录一行.为什么这个事件会发射两次?

此外,IHttpModule.BeginRequest实际上第一次运行时(从关闭的Web浏览器)触发第一页时触发的次数不同... ...当我点击数据库为页面提供动态数据时,3次并且只有1次没有命中数据库的页面.无论我是否触摸数据库,它在第一个页面之后每次点击时会触发2次.

有趣的是,Application_BeginRequest(在Global.asax中)始终只触发一次.

这是代码:

using System;
using System.Data;
using System.Data.Common;
using System.Net;
using System.Web;
using BluHeron.BusinessLayer;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;

namespace BluHeron.HttpModules
{
    public class SiteUsageModule : IHttpModule
    {
        public void Init(HttpApplication httpApp)
        {
            httpApp.BeginRequest += OnBeginRequest;
        }

        static void OnBeginRequest(object sender, EventArgs a)
        {
            UsageLogger.LogSiteUsage(((HttpApplication)sender).Context.Request);
        }

        public void Dispose()
        { }
    }

    public static class UsageLogger
    {
        public static void LogSiteUsage(HttpRequest r)
        {
            string ipAddress = GetHostAddress(Dns.GetHostAddresses(Dns.GetHostName()));
            string browserVersion = r.Browser.Type;

            string[] urlChunks = r.RawUrl.Split('/');
            string …
Run Code Online (Sandbox Code Playgroud)

asp.net httpmodule

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

Kohana的基本URL 3

如何获取Kohana 3中的基本URL?

原始PHP中是否有解决方案?

php kohana-3

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

使用Subversion标记部署到开发/暂存/测试服务器

Subversion标签是发布到开发或登台服务器的好方法吗?

我想象一下.

随着主干变得稳定,使用该构建创建标记.开发服务器利用Subversion切换到该标签,更新到最新版本的文件,删除不再需要的文件等.我设想的服务器帐户也只具有对存储库的只读访问权限.

这有意义吗?我正在考虑一种方法,我可以消除手动手动复制文件到开发/登台/测试服务器.

注意:我没有使用构建服务器,所以我不需要任何钩子.此外,这是一个Windows框.

svn workflow

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

GCC扩展ASM语法:将128位内存位置作为源加载

GCC为下面的shuffle()生成此代码:

movaps xmm0,XMMWORD PTR [rip+0x125]
pshufb xmm4,xmm0
Run Code Online (Sandbox Code Playgroud)

理想情况下,这应该是:

pshufb xmm4,XMMWORD PTR [rip+0x125]
Run Code Online (Sandbox Code Playgroud)

生成此单指令的扩展ASM语法是什么?

非常感谢,亚当

PS:注释掉的内在函数为此示例生成最佳代码.这通常不起作用(GCC很可能在存在全局寄存器变量时生成不必要的寄存器副本).

#include <stdint.h>

typedef int8_t xmm_t __attribute__ ((vector_size (16)));
const xmm_t xmm_shuf={128, 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15};
register xmm_t xmm __asm__("xmm4");

#define NTL ".intel_syntax noprefix\n"
#define ATT ".att_syntax\n"

void shuffle() {
  //xmm=__builtin_ia32_pshufb128(xmm, xmm_shuf);
  __asm__(NTL"pshufb %0, %1\n"ATT : "=x" (xmm) : "x" (xmm_shuf));
}

int main() {
}
Run Code Online (Sandbox Code Playgroud)

$ gcc -Os -std = gnu99 -msse4.1 -flax-vector-conversions pshufb_128bit_constant.c …

x86 assembly gcc sse

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

删除jscrollpane中的垂直滚动条?

是否可以删除JScrollPane中的垂直滚动条?

java jscrollpane

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