PHP开发原子操作,文件锁flock,数据库事务详细解析

PHP文件锁 PHP文件锁... 阅读详情

在这里插入图片描述
  php原子操作,文件锁flock,数据库事务
  php没有继承posix标准支持的unix锁,只封装了一个linux系统调用flock(信号量也能做成锁),按理也是可以使用锁机制的,虽然效率低一点。
  php脚本是运行在fastcgi容器中,而fastcgi是多进程的,所以如果php程序访问了临界资源,势必造成程序结果的不正确性。
  估计还要考虑下fastcgi容器的问题
  ------------------------------------
  问题描述:黑客用的工具刷我们的后台
  取消订单时会有退款,黑客并发取消订单,导致多次退款
  如果请求一个一个来,哪怕间隔100毫秒,也是没有问题的
  一个PHP处理过程是: 读退款标志,发现没退款, 退款,然后设置已退款标志
  问题是多个请求同时到了,读出来的退款标志都是未退款,所以多个请求都退款了
  同一个php文件,被同时请求多次,是同一时刻
  用php文件锁flock 我们试了不行,还是用C++队列
  用C++监听了一个端口,直接接收HTTP包,然后返回HTTP格式的包,PHP程序中用curl访问我这个C程序.
  相当于远程调用了,可以部署到其他服务器做分布式了
  =============================================
  很多时候,我们并没有考虑我们php代码的并行能力,尤其是在我们的php代码对某个资源可读可写的时候。但这并不是说php的所有操作就都是原子的,事务的,可并行的。由于php脚本是运行在fastcgi容器中,而fastcgi是多进程的,所以如果php程序访问了临界资源,势必造成程序结果的不正确性。
  解决问题的办法是使用锁机制。php没有继承posix标准支持的unix锁:比如记录锁fcntl,线程锁等,而只封装了一个linux系统调用flock(信号量也能做成锁),flock形式为flock( f p , fp, fp,type),其中 f p 为 文 件 句 柄 , 而 fp为文件句柄,而 fp为文件句柄,而type为:
  /* 当一个文件的打开方式是可读可写的,通常需要向文件加入锁机制 */
  1. LOCK_SH 共享锁:
  通常为进程向文件请求读操作时需加共享锁。共享锁可支持任意个进程间的读操作,如果写一个加了共享锁的文件则进程阻塞进入SLEEP状态值到共享锁解锁
  2. LOCK_EX 独占锁:
  通常为进程向文件的写操作加独占锁,一旦文件加上了该锁,则其他任意进程访问该文件时都会阻塞,直到解锁为止。
  3. LOCK_UN 解锁:
  为加锁的文件句柄解锁
  这样的加锁方式必然可以保证加锁程序块的原子性,但同时也牺牲了程序的效率,因此,我们实际的程序中应该在程序的加锁和解锁代码间嵌入尽量少的程序逻辑(尤其是独占锁),保证程序尽快解锁。
  最后,附上加上锁机制以后的程序:
  <?php
   u s r i n f o = i s s e t ( usrinfo = isset( usrinfo=isset(_GET[“usrinfo”])? G E T [ &quot; u s r i n f o &quot; ] : e x i t ( 1 ) ;     _GET[&quot;usrinfo&quot;]:exit(1);    G​ET["usrinfo"]:exit(1);  stinfo = isset( G E T [ &quot; s t i n f o &quot; ] ) ? _GET[&quot;stinfo&quot;])? G​ET["stinfo"])?_GET[“stinfo”]:exit(1);
  echo s t i n f o ;     stinfo;    stinfo;  pid = posix_getpid();
   f p = f o p e n ( “ u s r i n f o . t x t ” , ” a + ” ) ;     fp = fopen(“usrinfo.txt”,”a+”);    fp=fopen(“usrinfo.txt”,”a+”);  num = rand(0,100000);
  flock( f p , L O C K E X ) ;     f w r i t e ( fp,LOCK_EX);   fwrite( fp,LOCKE​X);  fwrite(fp,”user:”. u s r i n f o . ” s t i n f o : ” . usrinfo.” stinfo:”. usrinfo.”stinfo:”.stinfo.”–”. p i d . ” – ” . pid.”–”. pid.”–”.num.”\n”);
  fwrite( f p , ” t a l k i n g 1 — p i d : fp,”talking 1 — pid: fp,”talking1—pid:pid and num:KaTeX parse error: Expected 'EOF', got '\n' at position 4: num\̲n̲”);   flock(fp,LOCK_UN);
  fclose( f p ) ;     普 通 情 况 运 行 该 程 序 , 产 生 正 确 的 结 果 。     = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =     用 什 么 方 法 可 以 在 业 务 批 量 操 作 时 保 证 原 子 性 呢 ?     例 如 : 删 除 多 条 文 章 , 但 在 中 间 有 一 条 已 经 被 删 除 了 , 假 设 这 里 会 出 现 错 误 , 那 如 何 让 整 个 操 作 回 滚 , 并 定 位 错 误 信 息 呢 ?     数 据 库 的 事 务 保 证 原 子 性 但 不 能 定 位 错 误 信 息 , 但 遇 到 无 法 使 用 事 务 的 场 景 , 应 该 怎 么 做 呢 ?     − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − −     利 用 数 据 库 的 事 务 来 做 是 最 合 理 的 , 错 误 信 息 可 以 记 录 啊 , 有 操 作 失 败 抛 出 错 误 。     应 用 逻 辑 来 保 证 , 就 是 每 操 作 一 次 做 下 记 录 , 成 功 失 败 都 做 下 记 录 。 中 间 出 错 , 可 以 把 成 功 的 回 滚 。 一 般 我 们 删 除 是 假 删 除 , 所 以 很 容 易 。 如 果 真 删 除 , 记 录 时 要 记 录 完 整 信 息 。     = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =     P H P 用 文 件 锁 模 拟 进 程 锁 , 实 现 原 子 操 作     用 P H P 实 现 原 子 操 作 , 而 P H P 本 身 并 没 有 提 供 进 程 锁 机 制 , 用 P H P 文 件 锁 机 制 , 通 过 文 件 锁 模 拟 进 程 锁 实 现 原 子 操 作 。     原 子 操 作 的 代 码 之 前 , 使 用 排 他 锁 打 开 某 个 文 件 , 代 码 如 下 :     fp);   普通情况运行该程序,产生正确的结果。   ============================================   用什么方法可以在业务批量操作时保证原子性呢?   例如:删除多条文章,但在中间有一条已经被删除了,假设这里会出现错误,那如何让整个操作回滚,并定位错误信息呢?   数据库的事务保证原子性但不能定位错误信息,但遇到无法使用事务的场景,应该怎么做呢?   ----------------------------------------   利用数据库的事务来做是最合理的,错误信息可以记录啊,有操作失败抛出错误。   应用逻辑来保证,就是每操作一次做下记录,成功失败都做下记录。中间出错,可以把成功的回滚。一般我们删除是假删除,所以很容易。如果真删除,记录时要记录完整信息。   ========================================   PHP用文件锁模拟进程锁,实现原子操作   用PHP实现原子操作,而PHP本身并没有提供进程锁机制,用PHP文件锁机制,通过文件锁模拟进程锁实现原子操作。   原子操作的代码之前,使用排他锁打开某个文件,代码如下:    fp);  普通情况运行该程序,产生正确的结果。  ============================================  用什么方法可以在业务批量操作时保证原子性呢?  例如:删除多条文章,但在中间有一条已经被删除了,假设这里会出现错误,那如何让整个操作回滚,并定位错误信息呢?  数据库的事务保证原子性但不能定位错误信息,但遇到无法使用事务的场景,应该怎么做呢?  −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−  利用数据库的事务来做是最合理的,错误信息可以记录啊,有操作失败抛出错误。  应用逻辑来保证,就是每操作一次做下记录,成功失败都做下记录。中间出错,可以把成功的回滚。一般我们删除是假删除,所以很容易。如果真删除,记录时要记录完整信息。  ========================================  PHP用文件锁模拟进程锁,实现原子操作  用PHP实现原子操作,而PHP本身并没有提供进程锁机制,用PHP文件锁机制,通过文件锁模拟进程锁实现原子操作。  原子操作的代码之前,使用排他锁打开某个文件,代码如下:  fp = fopen( LOCK_FILE_PATH, “r” );
  if (!$fp) {
  echo “Failed to open the lock file!”;
  exit(1);//异常处理
  }
  flock ( $fp, LOCK_EX );
  原子操作的代码之后,对该文件解锁,并关闭文件,代码如下:
  flock ( $fp, LOCK_UN );
  fclose ( KaTeX parse error: Expected '}', got 'EOF' at end of input: …ILE_PATH) ){   fp = fopen( LOCK_FILE_PATH, “w” );
  fclose ( KaTeX parse error: Expected 'EOF', got '}' at position 9: fp );   }̲   fp = fopen( LOCK_FILE_PATH, “r” );
  if (!$fp) {
  echo “Failed to open the lock file!”;
  exit(1);//异常处理
  }
  flock ( $fp, LOCK_EX );
  //此处添加原子操作代码
  flock ( $fp, LOCK_UN );
  fclose ( $fp );
  以上便可实现PHP原子操作,避免冲突。
  ===========================================
  php原子操作与mysql原子操作
  原子操作常用的方法就是通过数据回滚来实现,用 PHP 来实现数据库回滚操作相当简单:
  1, 建立数据库连接
  2, mysql_query(‘BEGIN’); 开启事务
  3, S Q L = &quot; . . . &quot; ;     m y s q l q u e r y ( SQL = &quot;...&quot;;   mysql_query( SQL="...";  mysqlq​uery(SQL); 做相应的数据库操作
  4, 判断回滚条件:
  if(mysql_errno)
  {
  print mysql_error();
  mysql_query(‘ROLLBACK’); 出错就回滚
  exit();
  }
  5,可以重复上述步骤 3 及步骤 4 的操作, 开始的过程(中间可以加入其他操作,不局限于数据库更新,但是注意,最好不要让一个事务时间过长,因为它锁定所有你用到的表,会影响其他程序使用)
  你也可以在几条正确的sql更新语句后故意写一句错误的,看看是否回滚了。
  6, 结束回滚操作
  mysql_query(‘COMMIT’); 能够到这里,代表上述数据库操作都没有错,正式提交执行
  这就是用 PHP 实现原子操作的整个过程,需要特别注意的是建立支持数据回滚操作的表结构,
  另外,除 commit 外也有其它办法可以结束回滚操作。
  文章来自:https://www.itjmd.com/news/show-5381.html

PHP使用flock实现文件加锁的方法 主要介绍了PHP使用flock实现文件加锁的方法,实例分析了flock文件锁的使用技巧,需要的朋友可以参考下 立即下载

相关推荐

【BAAS】基于supabase的知识库详细设计

为满足快速开发需要和减少开发及维护成本,使用BAAS(Backend-as-a-Service)模式可以很好的降低我们的后端维护成本,并提高前端对接效率。一般来说,BAAS是一种云服务模式,BaaS供应商会为提供一些通用的能力,例如用户身份验证、数据库管理、远程更新和推送通知(针对移动应用程序),以及云存储和自托管。BaaS最主流的是Google的firebase,具有相当完善的功能和集成方案,但他是收费的,而且在我们实际项目中,可能需要私有化部署,这时就需要一些开源的替代方案,例如主流的。

Ric的博客 1781

php的原子操作,原子操作 · 国外PHP框架Nette官网教程 · 看云

# 原子操作用于文件操作的Nette \ Utils \ SafeStram协议保证每个文件操作的原子性和隔离。为什么它实际上好? 让我们从一个简单的例子开始,我们重复写入相同的字符串到文件,然后读取它:`~~~$s = str_repeat('Long String', 10000);$counter = 1000;while ($counter--) {file_put_contents('s...

weixin_30580403的博客 349

SAP Parallel Accounting(平行分类账业务)配置及操作手册【适用于多国家会计准则】

在SAP系统中,分类账(Ledger)是用于会计核算的核心概念,它允许企业根据不同的会计原则和货币进行财务记录。定义分类账是配置平行账(Parallel Accounting)的第一步。分类账的创建:通过事务代码OX18可以创建新的分类账。通常,一个SAP系统会有一个主分类账(如0L),它代表法定会计和实时传输至管理会计(CO)的账本。分类账属性:在创建分类账时,需要定义其属性,如会计年度变式、货币、会计原则等。这些属性将决定分类账的核算规则和适用性。

数字化2025 4616

php多线程原子操作,⚛ Atomic 原子操作与多线程

何谓原子操作?所谓原子操作,就是多线程程序中“最小的且不可并行化的”操作。对于在多个线程间共享的一个资源而言,这意味着同一时刻,多个线程中有且仅有一个线程在对这个资源进行操作,即互斥访问。JS 中的 AtomicChrome 67+实现了SharedArrayBuffer和Atomics。共享阵列缓冲区的概念是,您将消息发布给工作线程,但不是复制数组的内容,而是发送对它的引用,以便多个工作线程可以...

weixin_35241897的博客 445

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

php、redis实现分布式锁的正确写法(原子操作 通用类 加讲解)

redis分布式锁,实际工作中常用,面试中也常被问到。我工作多年的总结。

大牧关东 1462

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 497

php多线程原子操作,C语言线程互斥和原子操作

如果多个线程访问相同的数据,并且它们中至少有一个修改了数据,那么对共享数据的所有访问必须同步以防止数据竞争。但是,一个正在读取共享数据的线程可能中断另一个正在修改相同共享数据的线程,因此,可能导致线程读取到不一致的数据。甚至,由于程序在每次执行时系统可能调度不同的线程,导致每次运行程序时错误消息只能间歇地反映当时情况,很难在测试中复现错误。如例 1 所示,哪怕是自增一个计数器这样的简单操作,都可能...

weixin_36098237的博客 409

人工智能技术基础系列之:迁移学习

作者:禅与计算机程序设计艺术 1.背景介绍 随着深度学习和神经网络的快速发展,越来越多的应用场景需要处理大量的数据和复杂的任务。然而,由于计算资源、存储空间等条件的限制,传统的人工智能方法往往不能满足实际需求。因此,为了提高效率和降低成本,研究人员提出了迁移学习的概念。本篇文章将详细介绍迁移学习的基

AI天才研究院 695

【报错】ImportError: libpython3.10.so.1.0: cannot open shared object file: No such file or directory

ImportError: libpython3.10.so.1.0: cannot open shared object file: No such file or directory

静谧、淡雅 859

php的原子操作,php实现含有redis命令的原子操作

在做一个爬虫,其中有一部分是评论数据。因为评论数太多,所以想要将爬取下来的评论进行分表。目前的思路是:每个表保存100万条数据(1-1000000保存在table1,1000001-2000000保存在table2)。在redis创建一个String键comment:totalNum,保存数据库中已有的评论数。根据 comment:totalNum 来确定评论的主键id以及保存到哪个表中。目前思路...

weixin_35375774的博客 360

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之BswM模块配置详解(上)

weixin_42412049的博客 738

php原子操作,文件锁flock,数据库事务

php原子操作,文件锁flock,数据库事务 php没有继承posix标准支持的unix锁,只封装了一个linux系统调用flock(信号量也能做成锁),按理也是可以使用锁机制的,虽然效率低一点。php脚本是运行在fastcgi容器中,而fastcgi是多进程的,所以如果php程序访问了临界资源,势必造成程序结果的不正确性。估计还要考虑下fastcgi容器的问题------------...

子钦加油的博客 127

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

PHP文件锁解析 flock()

1、普通写入和读取 b.php写入 $file = 'tt.txt'; $fp = fopen($file,'a+b'); fwrite($fp,"c"); sleep(3); fwrite($fp,"a"); c.php读取 $file = 'tt.txt'; $fp = fopen($file,'rb'); echo fread($fp,1000); fc

fangzy0112的专栏 2036

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

flock用法详解 linux_linux使用flock文件锁

使用linux flock 文件锁实现任务锁定,解决冲突格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] commandflock --helpflock (util-linux-ng 2.17.2)Usage: flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command.....

weixin_39663729的博客 1060

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PHP中文件锁的使用详解

需要注意的是,对于高并发的情况,文件锁可能会成为性能瓶颈。PHP文件锁是一种用于控制对文件的并发访问的机制,它可以确保同一时间内只有一个进程或线程可以对文件进行读取或写入操作,下面我们就来了解一下文件锁的具体使用吧。文件操作安全性控制:在对某个文件进行操作时,如果需要确保在操作期间其他进程或线程无法对该文件进行访问,可以使用文件锁来控制文件的并发访问,保证操作的安全性。缓存同步:在使用文件作为缓存存储时,如果多个进程或线程需要同时读取或更新缓存,可以使用文件锁来控制对缓存文件的并发访问,保证数据的一致性。

Oona_01的博客 321

PHP flock文件锁详解介绍

PHP flock文件锁详解介绍 www.111cn.net 编辑:angel 来源:转载 为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有序的写入数据,不加锁的情况下会发生什么?多次有序的写入操作相当于一个事务,我们此时需要保证这个事务的

可克技术 2922

php flock文件锁通俗讲解几种锁的用法

使用共享锁(读锁)LOCK_SH,如果是读取,不需要等待,但如果是写入,需要等待读取完成。 使用独占锁也叫排它锁(写锁)LOCK_EX,无论写入/读取都需要等待。 LOCK_UN,无论使用共享/读占锁,使用完后需要解锁。 LOCK_NB,当被锁定时,不阻塞,而是提示锁定,直接拒绝 理解PHP文件锁关键是理解LOCK_SH和L...

大林的博客 818

php文件锁使用

PHP文件锁是一种用于控制对文件的并发访问的机制。它可以确保同一时间内只有一个进程或线程可以对文件进行读取或写入操作,以避免数据竞争和冲突。在PHP中,可以使用flock函数来实现文件锁。flock函数可以在指定的文件上加锁或解锁,确保在加锁期间其他进程或线程无法对该文件进行访问。共享锁(Shared Lock):多个进程可同时获取共享锁,用于读取文件内容,不允许其他进程获取独占锁或写入操作。

php-yyds 638

php中文件锁函数flock函数用法简介

php中文件锁函数flock函数用法简介:  语法:  bool flock ( int $handle , int $operation [, int &$wouldblock ] )  flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一:  1. 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.

goodspringin的专栏 1002

php 查看文件锁定状态_PHP flock 文件锁详细介绍

flock(PHP 4, PHP 5)flock — 轻便的咨询文件锁定说明bool flock ( int $handle , int $operation [, int &$wouldblock ] )PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。Note:在 Windows 下 flock() 将会强制执行。flock...

weixin_39977276的博客 355

php 定时任务 文件锁_PHP文件锁并发操作详解

本文主要和大家分享PHP文件锁并发操作详解,默认的:PHP的文件操作函数,不是阻塞状态,而是自由操作状态,希望能帮助到大家。条件:当需要一个脚本操作而需要阻塞另外的脚本操作时,需要用到文件锁。锁操作流程:先加锁,检测锁是否加成功,如果成功再使用!锁定类型:读锁: s-Lock(share-lock)共享锁,读操作前,期望增加的锁定。导致,允许并发读,阻塞额外的写操作。写锁: x-lock(ex...

weixin_39553156的博客 254
上一篇: python开发中装饰器-迭代器-生成器定义及用法详细解析
下一篇: 利用Python来实现网站目录扫描器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值