javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

spring-mvc

reflection

javascript-objects

html5

analytics

node.js

performance

branch-prediction

git-commit

git-revert

锁定-在Postgresql中选择未锁定的行

有没有办法在Postgresql中选择未锁定的行? 我有一个多线程应用程序可以做到:

Select... order by id desc limit 1 for update

在桌子上。

如果有多个线程运行此查询,则它们都将尝试拉回同一行。

一个获取行锁,其他阻塞,然后在第一个更新行后失败。 我真正想要的是第二个线程获得与For Update子句匹配且尚未锁定的第一行。

为了澄清,我希望每个线程在执行选择后立即更新第一个可用行。

因此,如果存在带有For Update的行,则第一个线程将进入,选择具有WHERE的行,并立即对其进行更新。

如果在该事务期间出现第二个线程,我希望它获得For Update的行并立即更新该行。

因为Share不会完成此操作,也不会使用For Update来完成,因为WHERE子句将匹配锁定的行ID 4。基本上,我想要的是ID 3子句中的“ AND NOT LOCKED”。

Users

-----------------------------------------
ID        | Name       |      flags
-----------------------------------------
1         |  bob       |        0
2         |  fred      |        1
3         |  tom       |        0
4         |  ed        |        0

如果查询为“ For Update”,并且返回一行,则下一个内容为“ WHERE”,那么我希望第一个线程使用ID 4来抢占该行,而下一个线程使用3007177154691073030来抢夺该行。

如果我在选择后附加“ For Update”,则第一个线程获取行,第二个线程阻塞,然后不返回任何内容,因为一旦第一个事务提交,就不再满足WHERE子句。

如果我不使用“ For Update”,则需要在后续更新中添加WHERE子句(WHERE标志= 0),因此只有一个线程可以更新该行。

第二个线程将选择与第一个线程相同的行,但是第二个线程的更新将失败。

无论哪种方式,第二个线程都无法获取行并进行更新,因为我无法使数据库将事务重叠的第4行分配给第一个线程,将第3行分配给第二个线程。

trans by 2020-08-11T20:58:05Z

html-可以使用<span />关闭跨度吗?

<span class="drop" />

HTML跨度可以这样关闭吗?

trans by 2020-08-11T20:51:53Z

亚马逊网络服务-API网关自定义授权者返回的401缺少“ Access-Control-Allow-Origin”头

为了防止尚未登录的用户通过AWS API网关调用我的lambda函数,我使用了Custom Authorizer lambda解决方案。

如果请求被授权(200),并且从被调用的lambda响应,则一切正常,并且得到Access-Control-Allow-Origin标头。

但是,如果请求未得到授权,则会得到一个没有Access-Control-Allow-Origin标头的401,因此阻止了我读取响应的401状态并将用户重定向到登录页面。

我相信这是因为“自定义授权”机制不知道该请求需要使用CORS。 有人知道这实际上是问题吗? 您知道任何可能的解决方案吗?

trans by 2020-08-11T20:49:05Z

什么是Java流中的“转义符操作”?

我在阅读Java文档,遇到了这句话:

除了转义填充操作iterator()spliterator()之外,执行在调用终端操作时开始,并在终端操作完成时结束。

我不确定“转义线操作”是什么意思。 有人可以解释这个名词吗?

trans by 2020-08-11T20:47:52Z

javascript-如何确定从序列中删除子序列的所有可能方式?

给定两个序列A和B,我如何生成可以从A中删除B的所有可能方式的列表?

例如,在JavaScript中,如果我有一个函数removeSubSeq([1,1,2], [1])接受了两个可以满足我需要的数组参数,则它将按以下方式工作:

removeSubSeq([1,1,2], [1])将返回[ [1,2], [1,2] ],因为末尾的4将匹配,并且1可以匹配三个位置

removeSubSeq([1,1,2], [1])将返回[ [1,2], [1,2] ],因为第二个参数实际上不是子序列

removeSubSeq([1,1,2], [1])将返回[ [1,2], [1,2] ],因为有两种方法可以删除1,即使它导致重复

trans by 2020-08-11T20:43:39Z

设计模式-工厂,抽象工厂和工厂方法

我对这三个术语感到非常困惑。

我的理解是:

  • 在工厂模式下,没有混凝土工厂。 工厂根据参数构建新对象。

  • 在抽象工厂模式中,有多个混凝土工厂。 客户必须显式创建不同的具体工厂。

那正确吗?

其他区别是什么?

此外,什么是工厂方法模式? 与工厂模式相同吗?

trans by 2020-08-11T20:40:36Z

html5-移动Web应用程序的推送通知功能

我有一个简单的方案,无论何时从服务器生成通知,它都会在移动设备上接收通知。

我知道此功能在本机iOS应用程序和Android中可用,但我正在尝试避免本机路径。 我想要的是:

  1. 可以通过访问URL来访问的移动Web应用程序
  2. 用户可以在主屏幕上创建书签,从而获得本机应用程序图标的感觉。
  3. 获取通知徽章(无圆形消息)
  4. 即使关闭浏览器也能够接收通知。

我知道服务器端事件/ Web套接字有可能,但是Web应用程序可以模拟推送通知功能吗?

谢谢

trans by 2020-08-11T20:36:32Z

javascript-Google Maps v3 API-自动完成(地址)

尝试自动完成我的Google Maps应用程序的工作。

这是当前代码:

的HTML

<input type="text" class="clearText" id="address" name="address" value="" size=20 autocomplete="off">

Java脚本

    var input = document.getElementById('address');
    var options = {
        componentRestrictions: {country: 'au'}
    };
    var autocomplete = new google.maps.places.Autocomplete(input, options);

不幸的是,键入地址时没有任何反应。

有任何想法吗?

提前致谢。

编辑:我实际上收到以下错误:

未捕获的TypeError:无法读取未定义的属性“自动完成”

不知道为什么,代码放在我的地图初始化函数中。

编辑2:固定。 请在下面回答。

trans by 2020-08-11T20:32:13Z

haskell-了解涉及GHCi让绑定的thunk的不同行为

我一直在玩Simon Marlow的书中有关并行和并发的一些示例在Haskell中进行编程,偶然发现了一个我不太了解的有趣行为。 这真的是关于我试图了解GHC的一些内部运作方式。

假设我在REPL中执行以下操作:

λ» let x = 1 + 2 :: Int
λ» let z = (x,x)
λ» :sprint x
x = _
λ» :sprint z
z = (_,_)
λ» seq x ()
()
λ» :sprint z
z = (3,3)

好的,这几乎是我所期望的,只是z已经获得WHNF的评估。 让我们编写一个类似的程序并将其放入文件中:

module Thunk where

import Debug.Trace

x :: Int
x = trace "add" $ 1 + 2

z :: (Int,Int)
z = (x,x)

并在GHCi中弄弄它:

λ» :sprint x
x = _
λ» :sprint z
z = _
λ» seq x ()
add
()
λ» :sprint z
z = _
λ» seq z ()
()
λ» z
(3,3)

因此,这表现有些不同:事先未对WHNF评估z。 我的问题是:

为什么在执行let z = (x,x)时在REPL中将z评估为WHNF,但在从文件中加载定义时却没有。 我的怀疑是它与模式绑定有关,但我不知道在哪里查找来进行澄清(也许我完全是完全错误的)。 我本来希望它的行为类似于文件中的示例。

任何指示或简短解释为什么会发生这种情况?

trans by 2020-08-11T20:30:47Z

选择MongoDb / CouchDb / RavenDb-性能和可扩展性advi

我们正在为某些读/写密集型应用程序寻找一种具有故障转移群集功能的文档数据库存储解决方案。

我们将平均每秒向数据库写入40K并发写入(在此期间峰值可以达到70,000)-并且可能发生几乎类似的读取次数。

我们还需要数据库通知新写入记录的机制(某种在数据库级别的触发器)。

在正确选择文档数据库和相关容量规划方面,什么是一个好的选择?

更新

关于期望的更多细节。

  • 平均而言,我们期望在3-4个数据库/文档集合中每秒插入(新文档)40,000(40K)。
  • 峰值可能达到120,000(120K)
  • 插入内容应立即可读-几乎实时
  • 与此相伴,我们期望每秒大约有5000次更新或删除
  • 同时,我们还期望500-600个并发查询可以访问数据。 这些查询和执行计划有些已知,尽管可能必须每周(例如)更新一次。
  • 系统应在存储侧支持故障转移群集
trans by 2020-08-11T20:27:02Z

Heroku数据库连接属性

我正在尝试执行一个相对琐碎的任务:我想连接到Heroku数据库。 我已经创建了数据库,并且已经从Heroku站点获得了凭据。 但是,当我尝试使用终端“ heroku”命令行客户端以外的任何内容连接到该数据库时,出现致命错误或无法连接错误。

我尝试在Heroku终端应用程序外部连接的两个工具是:Navicat和IntelliJ。

尝试连接数据库时,我在Navicat中收到的错误是:

could not connect to server: Host is down
    Is the server running on host "ec2-107-21-112-215.compute-1.amazonaws.com" and accepting
    TCP/IP connections on port 5432?

我的连接设置如下:

连接名称Heroku Dev Test

主机名/ IP地址ec2-107-21-112-215.compute-1.amazonaws.com

端口5432

Navicat甚至似乎都没有尝试连接到该主机名。

当我尝试使用完整凭据与IntelliJ连接时,出现以下错误:

java.sql.SQLException: FATAL: no pg_hba.conf entry for host "75.168.4.146", user "rphbqggxeokuxl", database "dc008iqk0rq4j5", SSL off

同样,访问他们网站上的数据库时,我使用的是Heroku应用程序提供的凭据。

之前有人遇到过此Heroku连接问题吗?

trans by 2020-08-11T20:21:18Z

在J中的Jackson JSON反序列化过程中,忽略缺少的属性

在这个例子中

class Person {
   String name;
   int age;
}

如果JSON对象缺少属性“ age”,

{
  name : John
}

Person person = objectMapper.readValue(jsonFileReader, Person.class);

它抛出JsonMappingException说它不能反序列化。 在反序列化期间是否有注释可以忽略丢失的字段?

谢谢

trans by 2020-08-11T20:17:56Z

线程安全,对吗?

只是检查...正在安全访问_count,对吗?

两种方法都可以通过多个线程访问。

private int _count;

public void CheckForWork() {
    if (_count >= MAXIMUM) return;
    Interlocked.Increment(ref _count);
    Task t = Task.Run(() => Work());
    t.ContinueWith(CompletedWorkHandler);
}

public void CompletedWorkHandler(Task completedTask) {
    Interlocked.Decrement(ref _count);
    // Handle errors, etc...
}
trans by 2020-08-11T20:13:15Z

ios-如何滚动到UITableView的确切末端?

我有一个UITableView,其中装有动态高度的单元格。 从视图控制器中推送视图控制器时,我希望表格滚动到底部。

我已经尝试使用contentOffsettableView scrollToRowAtIndexPath,但是我仍然无法获得理想的完美解决方案。

谁能帮我解决这个问题?

这是我要滚动的代码:

let indexPath = NSIndexPath(forRow: commentArray.count-1, inSection: 0)
tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)
trans by 2020-08-11T20:07:32Z

如何强制Android Studio 0.6.0使用SDK Build Tools 19.1.0

我刚刚将Android Studio更新为0.6.0,并将SDK生成工具更新为19.1.0,但是出现了以下错误:

The SDK Build Tools revision (19.0.3) is too low. Minimum required is 19.1.0

如何强制它使用SDK Build Tools 19.1.0? 我尝试删除19.0.3,但没有帮助。

[  75364]   WARN - nal.AbstractExternalSystemTask - The SDK Build Tools revision (19.0.3) is too low. Minimum required is 19.1.0 
com.intellij.openapi.externalSystem.model.ExternalSystemException: The SDK Build Tools revision (19.0.3) is too low. Minimum required is 19.1.0
    at org.jetbrains.plugins.gradle.service.project.AbstractProjectImportErrorHandler.createUserFriendlyError(AbstractProjectImportErrorHandler.java:106)
    at org.jetbrains.plugins.gradle.service.project.BaseProjectImportErrorHandler.getUserFriendlyError(BaseProjectImportErrorHandler.java:153)
    at org.jetbrains.plugins.gradle.service.project.BaseGradleProjectResolverExtension.getUserFriendlyError(BaseGradleProjectResolverExtension.java:352)
    at com.android.tools.idea.gradle.project.AndroidGradleProjectResolver.getUserFriendlyError(AndroidGradleProjectResolver.java:334)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$ProjectConnectionDataNodeFunction.fun(GradleProjectResolver.java:364)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver$ProjectConnectionDataNodeFunction.fun(GradleProjectResolver.java:330)
    at org.jetbrains.plugins.gradle.service.project.GradleExecutionHelper.execute(GradleExecutionHelper.java:203)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:116)
    at org.jetbrains.plugins.gradle.service.project.GradleProjectResolver.resolveProjectInfo(GradleProjectResolver.java:64)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:41)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl$1.produce(RemoteExternalSystemProjectResolverImpl.java:37)
    at com.intellij.openapi.externalSystem.service.remote.AbstractRemoteExternalSystemService.execute(AbstractRemoteExternalSystemService.java:59)
    at com.intellij.openapi.externalSystem.service.remote.RemoteExternalSystemProjectResolverImpl.resolveProjectInfo(RemoteExternalSystemProjectResolverImpl.java:37)
at com.intellij.openapi.externalSystem.service.remote.wrapper.ExternalSystemProjectResolverWrapper.resolveProjectInfo(ExternalSystemProjectResolverWrapper.java:49)
    at com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:48)
    at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:137)
    at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:123)
    at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$2.execute(ExternalSystemUtil.java:406)
    at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$3$2.run(ExternalSystemUtil.java:483)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:471)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
    at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:380)
    at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:419)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:149)

[  75373]   WARN - .project.GradleProjectImporter -
trans by 2020-08-11T20:05:25Z

C ++-无法解析的外部符号LNK2019

首先,我知道这个问题遍及整个网站,但我已经查看了几乎所有问题,似乎无法找出问题所在。 这是VS2012。谢谢。

//Socket.h
#pragma once

#include <iostream>
#include <WinSock2.h>

using namespace std;

const int STRLEN = 256;

class Socket
{
    protected:
        WSADATA wsaData;
        SOCKET mySocket;
        SOCKET myBackup;
        SOCKET acceptSocket;
        sockaddr_in myAddress;
    public:
        Socket();
        ~Socket();
        bool SendData( char* );
        bool RecvData( char*, int );
        void CloseConnection();
        void GetAndSendMessage();
};

class ServerSocket : public Socket
{
    public:
        void Listen();
        void Bind( int port );
        void StartHosting( int port );
};

class ClientSocket : public Socket
{
    public:
        void ConnectToServer( const char *ipAddress, int port );
};

这是Socket.cpp

//Socket.cpp


#include "stdafx.h"
#include "Socket.h"


Socket::Socket()
{
    if( WSAStartup( MAKEWORD(2, 2), &wsaData ) != NO_ERROR )
    {
        cerr<<"Socket Initialization: Error with WSAStartup\n";
        system("pause");
        WSACleanup();
        exit(10);
    }

    //Create a socket
    mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

    if ( mySocket == INVALID_SOCKET )
    {
        cerr<<"Socket Initialization: Error creating socket"<<endl;
        system("pause");
        WSACleanup();
        exit(11);
    }

    myBackup = mySocket;
}

Socket::~Socket()
{
    WSACleanup();
}

bool Socket::SendData( char *buffer )
{
    send( mySocket, buffer, strlen( buffer ), 0 );
    return true;
}

bool Socket::RecvData( char *buffer, int size )
{
    int i = recv( mySocket, buffer, size, 0 );
    buffer[i] = '\0';
    return true;
}

void Socket::CloseConnection()
{
    //cout<<"CLOSE CONNECTION"<<endl;
    closesocket( mySocket );
    mySocket = myBackup;
}

void Socket::GetAndSendMessage()
{
    char message[STRLEN];
    cin.ignore();//without this, it gets the return char from the last cin and ignores the following one!
    cout<<"Send > ";
    cin.get( message, STRLEN );
    SendData( message );
}

void ServerSocket::StartHosting( int port )
{
     Bind( port );
     Listen();
}

void ServerSocket::Listen()
{
    //cout<<"LISTEN FOR CLIENT..."<<endl;

    if ( listen ( mySocket, 1 ) == SOCKET_ERROR )
    {
        cerr<<"ServerSocket: Error listening on socket\n";
        system("pause");
        WSACleanup();
        exit(15);
    }

    //cout<<"ACCEPT CONNECTION..."<<endl;

    acceptSocket = accept( myBackup, NULL, NULL );
    while ( acceptSocket == SOCKET_ERROR )
    {
        acceptSocket = accept( myBackup, NULL, NULL );
    }
    mySocket = acceptSocket;
}

void ServerSocket::Bind( int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( "0.0.0.0" );
    myAddress.sin_port = htons( port );

    //cout<<"BIND TO PORT "<<port<<endl;

    if ( bind ( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress) ) == SOCKET_ERROR )
    {
        cerr<<"ServerSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(14);
    }
}

void ClientSocket::ConnectToServer( const char *ipAddress, int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( ipAddress );
    myAddress.sin_port = htons( port );

    //cout<<"CONNECTED"<<endl;

    if ( connect( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress ) ) == SOCKET_ERROR )
    {
        cerr<<"ClientSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(13);
    } 

}

这是stdafx.h

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>

// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>


// TODO: reference additional headers your program requires here
#include "Socket.h"

这是我的错误消息:

1>------ Build started: Project: Client, Configuration: Debug Win32 ------
1>  stdafx.cpp
1>  Socket.cpp
1>  Client.cpp
1>  Generating Code...
1>Socket.obj : error LNK2019: unresolved external symbol __imp__accept@12 referenced in function "public: void __thiscall ServerSocket::Listen(void)" (?Listen@ServerSocket@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__bind@12 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function "public: void __thiscall Socket::CloseConnection(void)" (?CloseConnection@Socket@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "public: void __thiscall ClientSocket::ConnectToServer(char const *,int)" (?ConnectToServer@ClientSocket@@QAEXPBDH@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__listen@8 referenced in function "public: void __thiscall ServerSocket::Listen(void)" (?Listen@ServerSocket@@QAEXXZ)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function "public: bool __thiscall Socket::RecvData(char *,int)" (?RecvData@Socket@@QAE_NPADH@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function "public: bool __thiscall Socket::SendData(char *)" (?SendData@Socket@@QAE_NPAD@Z)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ)
1>Socket.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ)
1>C:\Users\ajayp_000\documents\visual studio 2012\Projects\Client\Debug\Client.exe : fatal error LNK1120: 12 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
trans by 2020-08-11T20:02:40Z

使用Boost.Lockfree队列比使用互斥体慢

到目前为止,我在项目中使用的是boost::lockfree::queue。 我测量了此队列上特定操作所需的平均时间。

时间是在两台机器上测量的:我的本地Ubuntu VM和一台远程服务器。使用boost::lockfree::queue,两台计算机上的平均值几乎相同:〜750微秒。

然后,我将boost::lockfree::queue“升级”到bool is_lock_free(void) const;,这样我就可以摆脱保护队列的互斥锁了。 在我的本地VM上,我可以看到巨大的性能提升,现在平均为200微秒。 但是,在远程计算机上,平均时间达到800微秒,比以前慢。

首先,我认为这可能是因为远程计算机可能不支持无锁实现:

在Boost.Lockfree页面上:

并非所有硬件都支持同一组原子指令。 如果它在硬件中不可用,则可以使用防护在软件中对其进行仿真。 然而,这具有丢失无锁属性的明显缺点。

要了解是否支持这些说明,boost::lockfree::queue具有称为bool is_lock_free(void) const;的方法。但是,boost::lockfree::spsc_queue没有这样的功能,对我而言,这意味着它不依赖硬件,并且在任何计算机上始终是无锁的。

性能下降的原因可能是什么?


示例代码(生产者/消费者)

// c++11 compiler and boost library required

#include <iostream>
#include <cstdlib>
#include <chrono>
#include <async>
#include <thread>
/* Using blocking queue:
 * #include <mutex>
 * #include <queue>
 */
#include <boost/lockfree/spsc_queue.hpp>


boost::lockfree::spsc_queue<int, boost::lockfree::capacity<1024>> queue;

/* Using blocking queue:
 * std::queue<int> queue;
 * std::mutex mutex;
 */

int main()
{
    auto producer = std::async(std::launch::async, [queue /*,mutex*/]() 
    {
        // Producing data in a random interval
        while(true)
        {
            /* Using the blocking queue, the mutex must be locked here.
             * mutex.lock();
             */

            // Push random int (0-9999)
            queue.push(std::rand() % 10000);

            /* Using the blocking queue, the mutex must be unlocked here.
             * mutex.unlock();
             */

            // Sleep for random duration (0-999 microseconds)
            std::this_thread::sleep_for(std::chrono::microseconds(rand() % 1000));
        }
    }

    auto consumer = std::async(std::launch::async, [queue /*,mutex*/]() 
    {
        // Example operation on the queue.
        // Checks if 1234 was generated by the producer, returns if found.

        while(true)
        {
            /* Using the blocking queue, the mutex must be locked here.
             * mutex.lock();
             */

            int value;
            while(queue.pop(value)
            {
                if(value == 1234)
                    return;
            }

            /* Using the blocking queue, the mutex must be unlocked here.
             * mutex.unlock();
             */

            // Sleep for 100 microseconds
            std::this_thread::sleep_for(std::chrono::microseconds(100));
        }
    }

    consumer.get();
    std::cout << "1234 was generated!" << std::endl;
    return 0;
}
trans by 2020-08-11T20:00:49Z

如何在Scala中的默认构造函数中检查构造函数参数并引发异常或声明?

我想检查构造函数参数,并拒绝构造抛出IllegalArgumentException的情况,以防参数设置无效(值不符合预期约束)。 如何在Scala中编写代码?

trans by 2020-08-11T19:59:05Z

目标c-不区分大小写的核心数据包含或开始具有约束

我有一个谓词看起来像

[NSPredicate predicateWithFormat:@"region=%@ && locality CONTAINS %@", self.region, query];

我希望它匹配忽略大小写。 诀窍是什么?

trans by 2020-08-11T19:56:10Z

ruby on rails-如何覆盖form_for帮助器中的类名?

我需要在表单中添加一些类名。 我正在使用Rails的form_for助手来执行此操作。 我尝试添加{ :class => 'classname' }无济于事。

如何向该Rails助手输出添加类?

trans by 2020-08-11T19:54:17Z

上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下一页 共4258页