PHP 5.x同步文件访问(无数据库)。
我大多熟悉Java,C和C ++,其中有一些方法可以控制一个线程在任何给定时间都访问资源.现在,我正在寻找类似的东西,但在php 5.x中. 用一个示例来提出我的问题: 我有一个仅存储一个数字的ASCII文件,即页面加载计数器的值.在应用程序部署时,文件将简单地持有0.对于每个访问,该值将被一个递增.目标是跟踪页面负载. 当许多用户同时访问包含计数器的页面时,问题就会出现.当线程A读取当前值时,假设它是11,我们称之为B的另一个线程读取值,仍然为11.然后,第一个线程A递增读取值并将12个写入文件中并将其关闭.然后,第二个线程B递增11个读取值,即11,将其写入文件中.值12存储在文件中,当时它应该是13. 在另一种编程语言中,我本可以使用互斥品解决此问题.我知道有一些静音,共享内存和其他拟合性作为模块的一部分.但是我想要一个解决方案,该解决方案可用于其中的"大多数服务器".平台独立.安装在大多数廉价的网络主机上.有很好的解决方案吗?如果没有,如果使用数据库不是选
0 2023-05-30
编程技术问答社区
PHP重写一个包含的文件-这是一个有效的脚本吗?
我已经提出了这个问题: php互斥(mutex) 如那样,我希望有几个来源偶尔发送其统计信息,这些统计信息将在网站的主页上显示. 我的问题是我希望以原子方式完成此操作,因此统计数据的更新不会在后台重叠. 现在,我想出了这个解决方案,我希望您PHP专家来判断它. stats.php index.php update.php '); $fd = fopen("stats.php", "w+"
0 2023-05-29
编程技术问答社区
PHP互斥(mutex)
阅读一些有关锁定php的文本. 他们全部主要直接直接直达 http://php.net/manual/manual/en/function. Flock.php . 此页面谈论在硬盘上打开文件! 真的是吗?我的意思是,这使得锁定真的很昂贵 - 这意味着每次我想锁定时,我都必须访问硬盘)= 可以通过一个令人愉快的消息安慰我吗? 编辑: 由于我这里得到了一些答复,我想问这个; 我的脚本只能由一个线程或几个线程运行?因为如果是一个人,那么我显然不需要静音.有简洁的答案吗? 我到底要做什么 ircmaxell问. 这是故事: 我有两个FTP服务器.我希望能够在我的网站上显示多少在线用户. 因此,我认为这些FTP服务器会将其统计数据"发布"到某个PHP脚本页面.让我们假设此页面的URL为" http://mydomain.com/update.php ". 在网站的主页上(" http://mydomain.com/index.php
0 2023-05-26
编程技术问答社区
我怎样才能知道我的程序的另一个实例是否已经在运行?
我如何确定程序的一个实例是否正在运行? 我以为我可以用数据文件做到这一点,但这只是凌乱:( 我想这样做,因为我只希望有一个实例在某个时候打开. 解决方案 您可以创建信号量并停止执行(将代码放入 *.dpr文件中)并将运行应用程序带到屏幕. var Semafor: THandle; begin { Don't start twice ... if already running bring this instance to front } Semafor := CreateSemaphore(nil, 0, 1, 'MY_APPLICATION_IS_RUNNING'); if ((Semafor 0) and { application is already running } (GetLastError = ERROR_ALREADY_EXISTS)) then begin RestoreWindow('TMyApp
4 2023-05-25
编程技术问答社区
为什么Rust Tokio的表现如此糟糕? [发布测试结果更新]
以下方案经常用于异步编程. 通道TX/RX; Mutex锁/解锁; 异步任务产生; 因此,我对较低的性能云主机(相当于J1900)进行了一些比较测试,如下所示.我发现与Go-Lang相比,Rust-Tokio的性能非常非常差. 是否需要调整任何参数?单程执行器可以改进吗? 结果. tx/rx,时间per op: go-lang:112 ns, tokio :: Sync :: mpsc :: channel:7387 ns; std :: Sync ::频道:2705 NS, crossbean:1062 ns. mutex锁/解锁,per op: tokio :: Sync :: Mutex 4051 NS std :: Sync :: Mutex 321 NS spawn(不加入),按OP: tokio :: Spawn:8445 NS rust tokio test tx/rx #
0 2023-05-24
编程技术问答社区
Java编写互斥锁的最快方法?
在Mutex上使用简单的同步关键字. 使用二进制. 使用原子变量,例如讨论在这里./li> ...? 最快(最佳运行时)是什么?我认为同步最常见,但是性能呢? 解决方案 静音在许多编程语言中很常见,例如C/C ++.我想念他们在Java中. 不确定我关注您(尤其是因为您在问题中给出答案). public class SomeClass { private final Object mutex = new Object(); public void someMethodThatNeedsAMutex() { synchronized(mutex) { //here you hold the mutex } } } 另外,您可以简单地使整个方法同步,这等同于将this用作Mutex对象: public class SomeClass { public syn
2 2023-05-23
编程技术问答社区
如何在linux中剖析pthread的mutex?
我想知道如何介绍pthread mutex,以查看我的代码中是否有锁定争论点. (谁喜欢有争议的代码,对吧?:)我知道如何对代码进行更全面的分析,正如我提到的在这里.但是我想知道是否有任何工具或选项可以介绍静音锁定的误差,这些锁定将提供有关Mutex锁定论点的指标/统计信息,以查看我是否有任何问题领域. 这是一些背景和上下文: 最近,我使用Cavium Octeon CPU在一个嵌入式的C ++项目中工作. OCTEON SDK使用Spinlock实现Mutex样式同步.浏览Octeon文档,我遇到了一种介绍Spinlocks的方法,以便能够在等待锁定的同时看到每个Spinlock旋转多少次.要使用它,我必须进行有条件的编译,然后每次旋转旋转时都会增加计数器,然后我可以查询旋转器等待值.因此,我所做的是封装自旋锁,并为系统中使用的所有Spinlock倾倒Spinlock Spinner等待值的能力.实际值并没有太多意义,但是与其他值相比,有几个的值确实很高,我专注于减少对这些
0 2023-05-23
编程技术问答社区
pthread mutexes的开销?
我正在尝试制作C ++ API(对于Linux和Solaris)线程安全,以便可以从不同的线程中调用其功能而不会破坏内部数据结构.在我当前的方法中,我正在使用pthread Mutexes来保护对成员变量的所有访问.这意味着现在一个简单的getter函数锁定并解锁了一个互斥性,我担心此的开销,尤其是因为API大多将用于单线读取应用程序中,任何静音锁定似乎都像纯pure. 所以,我想问: 您是否有使用锁定与不使用锁定的单线读取应用的性能? 与EG相比,这些锁/解锁电话是多么昂贵. Bool成员变量的简单"返回此 - > ISACTIVE"访问? 您知道保护此类可变访问的更好方法吗? 解决方案 所有现代线程实现都可以完全在用户空间中处理一个无构造的互斥锁(只有几个机器说明) - 只有在有争议时,库才能拨打内核. . 要考虑的另一点是,如果应用程序没有明确链接到pthread库(因为它是一个单线程应用程序),则它将仅获得虚拟pthread函数(完全不执行任何锁定功能
0 2023-05-23
编程技术问答社区
VBA是否使用全局解释器锁?所有的解释语言都需要一个吗?
使用Application.Run方法,可以将VBA类(com对象)从一个托管的VBA进程传递到另一个托管的VBA进程(例如Excel.exe的一个实例).这意味着第二个过程(线程2)将可以访问第一个过程中定义的代码(线程1). 因此,第二个线程可能会从线程1上调用一个使用第一个线程的解释器,因此,线程1的解释器同时调用线程1的解释器. 这可能对任何人都不足为奇,但这对我来说是不足为奇的,因为VBA被用作单个线程语言(所有这些都在主机应用程序的UI线程中运行!),并且不给您语法来编写多线程代码.基于此,我认为VBA解释器不会安全,并且不允许从其他线程执行.但是显然您可以,而且我也将VBA对象传递给Python库(我想象它在带有Python解释器的单独线程上运行). 那么,如何完成,VBA像Python这样的GIL - 这意味着口译员一次只能由单个线程运行,还是还有其他事情正在发生?有什么办法检查? 解决方案 要控制哪些线程可以访问com对象(线程亲和力)上的方法
0 2023-05-23
编程技术问答社区
冒名顶替后CreateMutex失败
这是我试图模仿用户然后创建互斥X的代码. Mutex并未创建.我得到error_access_denied错误. void Impersonate() { DWORD logonType = LOGON32_LOGON_INTERACTIVE; DWORD logonProvider = LOGON32_PROVIDER_DEFAULT; HANDLE userToken; HANDLE hMutex; DWORD err; LPSTR user = "zoom"; // the user I created myself on my machine. // It has Administrator privileges, and my account, // from which I start the app, is Admin too LPSTR password = "zoom"; LPS
4 2023-05-22
编程技术问答社区
在std::async中,是什么导致了数据竞赛?
我最近在Conway的生活游戏中创建了一个模式搜索程序,但它的运行太慢而无法实用. 因此,我决定将其平行,但我失败了.它引起了细分故障,这很可能是由于数据竞争. 代码的简要说明: /* ... */ #include #include #include #include #include int main() { /* ... */ while (true) { /* ... */ std::forward_list results; std::list> results_future; std::mutex results_mutex; for (/*All the possible unique pattern
4 2023-05-19
编程技术问答社区
静音如何工作? Mutex在全球范围内保护变量吗?定义的范围是否重要?
互斥锁在全球范围内访问变量,还是与锁定的静音的范围相同的范围? 请注意,我必须更改这个问题的标题,因为许多答案似乎对我的要求感到困惑.这不是关于"静音对象"的范围(全局或其他)的问题,而是关于变量范围"锁定"的问题. 我相信答案是mutex锁定所有变量,即;所有全局和本地范围的变量. (这是Mutex阻塞线程执行而不是访问内存特定区域的结果.) 我试图理解静音. 我试图理解内存的部分或等效的部分,变量会锁定. 但是,我从在线阅读的理解是,静音 do 不是锁定内存,它们同时锁定(或块)同时运行的线程,这些线程都是同一过程的成员. (正确吗?) 所以我的问题已经变得简单地" sutexes是全球吗?" ...或者他们可能"一般来说全球,但是Stackoverflow社区可以想象一些没有的特殊情况?" 最初考虑我的问题时,我对以下示例中所示的事物感兴趣. // both in global scope, this mutex will lo
4 2023-05-19
编程技术问答社区
procs, fork(), and mutexes
我想创建并行运行的n个进程,并让它们锁定互惠件,增加计数器,然后解锁和退出. 这是我的代码: #include #include #include #include #include #include #include pthread_mutex_t mutex; int main(int argc, char **argv) { if (argc != 2) return 0; int n = atoi(argv[1]); int i = 0; int status = 0; pthread_mutex_init(&mutex, NULL); pid_t pid = 1; static int *x; x = mmap(NULL, sizeof *x, PRO
2 2023-05-19
编程技术问答社区
使用线程的并行合并排序比Seq. 合并排序。帮助
http://pastebin.com/yms4ehrj ^这是我对并行合并排序的实现.基本上,我要做的是,对于每个分段,上半年都由线程处理,而下半部分是顺序的(即)说我们的数组是9个元素,[0..4]由线程1,[0 [0]处理..1]被处理的线程2,[5..6]由线程3处理(查看源代码以进行澄清). 其他一切都保持不变,例如合并.但是问题是,这比合并排序慢得多,甚至比普通气泡排序慢!我的意思是将25000 int的数组.我不确定瓶颈在哪里:是静音锁定吗?是合并吗? 关于如何更快地使此方法的任何想法? 解决方案 您正在创建大量线程,每个线程都很少做.要对25000 int进行排序,您可以创建大约12500个线程,这些线程产生其他线程并合并其结果,以及大约12500个线程,每个线程仅分类二 ints. 创建所有这些线程的开销远远超过了您从并行处理中获得的收益. 为了避免这种情况,请确保每个线程都有合理的工作要做.例如,如果一个线程发现它只需要对 其他解决
2 2023-05-19
编程技术问答社区
最大限度地提高工作线程的利用率
要解决一个问题(更好地理解多任务处理),我写了一个小的线程池实现.该线程池插入了许多工作线程,这些线程是由线程池的客户端添加时从队列中弹出的.出于这个问题的目的,当任务队列为空时,工人线程均已终止. 进行了一些基本的基准测试后,我发现该应用程序花费了约60%的时间等待获得队列锁.大概这主要是在工作线程中进行的. 这仅仅表明我没有给工人线程足够多,还是其他?我可能缺少一些简单的东西来增加工作线吞吐量吗? 编辑:这是一些粗糙的伪代码,应该在某种程度上说明事情.这是在执行工作线程期间获得/释放锁的仅有的两个地方(这是应用程序运行时间的绝大多数.) ) std::list task_list; // Called by the client to add tasks to the thread pool void insert_task(const task_t& task) { lock_type listlock(task_mutex);
8 2023-05-12
编程技术问答社区
有没有可能在Java中有效地实现一个seqlock呢?
另一个问题让我想知道 seqlock 可以通过Java中的挥发性版本进行有效实现. 这是一个典型的实现,对于情况,只有一个作者线程: class Seqlock { private volatile long version = 0; private final byte[] data = new byte[10]; void write(byte[] newData) { version++; // 1 System.arraycopy(newData, 0, data, 0, data.length); // 2 version++; // 3 } byte[] read() { long v1, v2; byte[] ret = new byte[data.length]; do { v1 = version; // 4 System.arraycopy(data, 0
2 2023-05-12
编程技术问答社区
在wait()/signal()块中的mutex获取会发生什么?
所以练习的描述: 您有这家餐厅,其中有n个点可以要求一部分薯条.每个点都有M部分.有1个Frycheff.当订单点有2个部分时,它警告Cheff需要补充. Cheff按FIFO顺序提供部分. 我们制作了这个伪代码: init { Semafoor[] mutex; Condition[] cond_point = new Condition[N]; int[] portions = new int[N]; ArrayList waitline = new ArrayList(); for(int i = 0; i
2 2023-05-12
编程技术问答社区
为什么使用单个"转向"变量简化了彼得森的算法,不提供过程同步?
我正在阅读" 操作系统概念"并试图理解彼得森的解决方案(第208页),一种用于确保两个过程共享内存的算法不能同时访问共享资源(有可能创建种族条件). 在彼得森的解决方案中,有两个共享变量有助于同步:"布尔标志[2]"和" int turn". " flag [i]"指示特定过程是否正在尝试输入其"关键部分",即访问共享数据的部分. "转"包含两个过程的索引(0或1)之一,并指示哪个过程'转动是访问共享数据的过程. 彼得森的算法(对于过程i,另一个过程用j表示)如下: do { #set flag to say I'm trying to run flag[i] = true #let the other process have a turn turn = j while(flag[j] == true && turn == j); #enter critical section flag[i] = false
18 2023-05-12
编程技术问答社区
互斥权访问和系统调用
我知道,在Linux 中,在下面的 futexes 下实现了, futex use 比较和swap 机制.通常用于获取锁,用户空间线程无需在用户空间中解决锁定时进行系统调用. 现在,我的问题是,当有很高的争论和许多线程同时锁定互斥X时会发生什么.是否会发生系统调用,然后内核决定要授予静音的线程?特别是当线程优先级不同时?我本人是这样认为的. 解决方案 只要没有争议,就没有进行系统调用.如果有争议,则会进行系统调用,以将线程放在睡眠队列中,然后将其用于查找二线自由时醒来的第一个线程.此外,在SYSCALL中对FUTEX的值进行了调整,以便当前拥有的线程不会通过用户领域的"快速路径" Unlock例程(只需将FUTEX重置为零或"解锁")值),但会再次进行另一个系统调用,以检查睡眠队列是否等待线程将锁所有权传递给.随着更多的线程争夺锁,当然会有更高的机会发现争论,但是,如果没有争议,则不会进行sys-call. 其他解决方案 futexes仅在倒回Syscall之前进行
0 2023-05-11
编程技术问答社区
监控器与互斥器
我读到,静音是一个具有值1(二进制信号)的信号量,用于执行相互排斥. 我读了此链接 semaphore vs. Monitors-有什么区别? 该显示器有助于实现相互排斥. 有人可以告诉我静音和监视器之间的区别,因为两者都有助于实现同一件事(相互排除)? 解决方案 由于您尚未指定您正在谈论的OS或语言/库,请让我以通用的方式回答. 从概念上讲它们是相同的.但是通常它们的实施略有不同 监视器 通常,监视器的实现更快/轻重,因为它是为在同一过程中多线程同步而设计的.而且,通常,它由框架/库本身提供(而不是请求操作系统). mutex 通常,静音由OS内核提供,库/框架只需提供一个接口来调用它.这使它们变得重量/较慢,但它们在不同过程中跨线程工作. OS可能还可以提供通过名称访问MUTEX的功能,以便在单独的可执行文件的实例之间轻松共享(而不是使用fork仅使用的句柄). 其他解决方案 监视器与静音不同,但在Mutex上构建监视器的某种
8 2023-05-11
编程技术问答社区